본문 바로가기
IT/LLVM

LLVM Pass 실행

by SH_SH 2020. 9. 11.

 

LLVM에서 Pass를 컴파일하고 (*.so) 아래의 명령어를 사용해 IR 코드를 분석할 수 있다.

 

$ opt -load *.so -PASSNAME *.ll (혹은 *.bc)

 

PASSNAME 부분에는 코드에서 RegisterPass에서 지정한 이름을 입력하면 된다.

 

만약 아래와 같이 Hello라고 등록을 하였으면 

static RegisterPass<HelloModule> X("Hello", "Hello World Pass "); 

 

$ opt -load HelloModule.so -hello *.ll 

 

과 같이 실행하면 된다.

 

단순히 Pass를 적용한 결과를 보고 싶으면 위의 명령어를 사용하면 되지만, 아래와 같은 경고가 뜬다.

 

WARNING: You're attempting to print out a bitcode file. This is inadvisable as it may cause display problems. If you REALLY want to taste LLVM bitcode first-hand, you can force output with the `-f' option.

 

분석에 지장은 없지만, 경고가 거슬리는 경우 아래와 같이 실행해서 output을 명시한다.

 

$ opt -load HelloModule.so -hello < *.ll > /dev/null

 

 

Pass를 적용한 코드를 생성하기 위해서는 아래와 같이 opt의 인자로 -o를 사용한다.

 

$ opt -load HelloModule.so -hello original.ll -o original.opt.ll

 

그러면 Pass가 적용된 original.opt.ll이 생성되고, clang 으로 컴파일해서 실행하면 된다.

 

'IT > LLVM' 카테고리의 다른 글

LLVM clang IR(*.ll) 변환  (0) 2020.09.11
LLVM basic block call flow graph  (0) 2020.09.07