Clang/LLVMのツールチェーンでControl Flow Graphを出してみる。

rutilicus.hatenablog.com
これの続き。

Stack OverflowでClang/LLVMのツールチェーンを使えばControl Flow Graphが出せるということなのでやってみた。ソースコードは承前の記事内のものと同一。

$ echo {bef,aft} | xargs -n 1 | xargs -I@ clang -fno-discard-value-names -emit-llvm -S @.c -o @.ll
$ for name in {bef,aft}; do opt -analyze --dot-cfg "$name".ll; dot -Tpng .a.dot -o "$name".png; done

出るのがこんな感じのpng画像。

  • bef.c

  • aft.c

-fno-discard-value-namesオプションを付けることで変数名は残っていますが、それでもLLVM IRからオリジナルのソースコードの位置を出すのは骨が折れそうですね。Clangのオプション次第でLLVM IR内にコメントとして残せるのでしょうか。