LLVM IRの構造をグラフで見たかったので試してみました.メモ.
参考資料:
LLVM’s Analysis and Transform Passes
Visualizing code structure in LLVM
環境: Arch Linux,LLVM 3.4,graphviz 2.36.0
試す
試しに使ったC++コード(test.cpp)
ProcGarden - test.cpp (libc++がおかしいのでclangでなくGCCでビルドしています…ウッ)
そして,この test.cpp をclang++ test.cpp -emit-llvm -c -SでLLVM IRにした結果は以下(test.ll)
このLLVM IRとoptコマンドを用いてdotファイルを生成し,それをgraphvizで可視化する.
CallGraph
opt test.ll -dot-callgraph > /dev/null
e.g. CallGraphをgraphvizを用いてPNGにする
dot -Tpng callgraph.dot > callgraph.f.png

CFG
opt test.ll -dot-cfg > /dev/null
e.g. 関数fのCFGをgraphvizを用いてPNGにする
dot -Tpng cfg._Z1fv.dot > cfg.f.png

Dominance Tree
opt test.ll -dot-dom > /dev/null
e.g. 関数fのDominance Treeをgraphvizを用いてPNGにする
dot -Tpng dom._Z1fv.dot > dom.f.png

Post-dominance Tree
opt test.ll -dot-postdom > /dev/null
e.g. 関数fのPost-dominance Treeをgraphvizを用いてPNGにする
dot -Tpng postdom._Z1fv.dot > postdom.f.png

おわり
次はLLVMで例外を使ってみる.