yutopp's blog

サンドバッグになりたい

LLVM IRの構造の可視化をするメモ

LLVM IRの構造をグラフで見たかったので試してみました.メモ.

参考資料:

LLVM’s Analysis and Transform Passes

Visualizing code structure in LLVM

環境: Arch LinuxLLVM 3.4,graphviz 2.36.0

試す

試しに使ったC++コード(test.cpp)

ProcGarden - test.cpp (libc++がおかしいのでclangでなくGCCでビルドしています…ウッ)

そして,この test.cppclang++ test.cpp -emit-llvm -c -SLLVM IRにした結果は以下(test.ll)

ProcGarden - 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

f:id:yutopp:20140503003625p:plain

CFG

opt test.ll -dot-cfg > /dev/null

e.g. 関数fのCFGをgraphvizを用いてPNGにする

dot -Tpng cfg._Z1fv.dot > cfg.f.png

f:id:yutopp:20140503003546p:plain

Dominance Tree

opt test.ll -dot-dom > /dev/null

e.g. 関数fのDominance Treeをgraphvizを用いてPNGにする

dot -Tpng dom._Z1fv.dot > dom.f.png

f:id:yutopp:20140503003640p:plain

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

f:id:yutopp:20140503003658p:plain

おわり

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