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 |