LLVM IRの構造の可視化をするメモ
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で例外を使ってみる.