c 프로그램에서 변형 패스 (dead code elimination)와 같은 변경 사항을 보는 방법 터미널에서 다음 명령을 실행하면 .bc 파일이 만들어집니다. IR을 볼 수 있습니다. 그러나 C 프로그램에서 변경된 내용을 보는 방법. 명령 : $ opt in.bc -o out.bc -dcellvm 변환에 의한 변경 내용을 보는 방법
1
A
답변
2
C 코드에 반영된 IR의 변경 사항을 볼 수 없습니다. 다시 변환 할 필요가 없습니다. (물론 LLVM에는 C 백엔드가 사용되었지만 (1) 더 이상 지원되지 않으며 (2) 프로그램의 형식이 아니라 양식의 의미를 보존합니다.
할 수 있습니다. do는 디버그 정보로 컴파일되며, LLVM 측의 정보는 DCE 뒤에있는 정보로 컴파일되어 패스가 소스 코드에 어떤 영향을 미치는지 추론합니다.
또는 소스 코드에서 직접 변환 할 수있는 것이 중요하다면 Clang의 frontend actions과 같은 것을 사용해야합니다. 그러나 거기에서 많은 로직을 구현해야합니다. LLVM의 최적화 과정을 즐겨보십시오.
1
C 프로그램의 변경 사항을 볼 수 없다고 생각합니다.
LLVM 변환은 LLVM IR에서 작동합니다. 따라서 c 프로그램에 해당하는 LLVM IR (.ll 형식)을 생성 할 수 있습니다. 패스의 .bc 파일 출력을 얻으면 .bc 파일을 .ll 형식으로 변환 할 수 있습니다. 그런 다음 두 .ll 파일을 비교할 수 있으며 패스에 의해 변경된 내용을 볼 수 있습니다 (예 : dce).
0
DCE 패스를 적용하고 패스가 변경 한 사항을 확인하려면 llvm-nm을 사용하는 것이 좋습니다. llvm-nm을 사용하면 함수 및 데이터 객체를 포함하여 비트 코드 파일 내부의 심볼을 볼 수 있습니다. 원본 비트 코드 파일 및 최적화 된 버전에 대한 llvm-nm의 출력을 비교하여 DCE 패스로 제거 된 기능을 확인할 수 있습니다.
감사합니다. – user2167322
루프 유도 변수가 경계를 명명하는 것과 같이 루프 정보를 추출하기위한 샘플 패스를 만들고 싶습니다. LoopPass, LoopInfo, LoopExtractor 등의 루프에 파일이 많아서 함수를 사용하는 방법이나 어떤 파일이 유용 할지를 알기 때문에 패스 작성을 시작해야합니다. 나는이 링크를 이미 지나쳤다 : http : //llvm.org/docs/WritingAnLLVMPass.html#introduction-what-is-a-pass – user2167322
@ user2167322 최상의 결과를 얻으려면 stackoverflow에서 새로운 질문을하고 누군가 당신을 도울 수 있어요. – Oak