generated at
LLVM IR
言語やアーキテクチャから独立した独自の中間表現
オンメモリで扱えるぐらいに軽量
LLVMJIT Compilerを利用できるようにするため
命令の多くはアセンブリに似た3番地コード
変数はレジスタに保存される
全てのレジスタ変数がSSA形式
2つの形式がある
バイナリ形式
バイナリなだけであって、LLVMアセンブリの命令と一対一対応している
拡張子は .bc





区分 ref
Module
Functionを複数持つ
Function
BasicBlockを複数持つ
C++の関数と同じ
とは #??
BasicBlock
Instructionを複数持つ
ラベルごとで分けられる
Instruction
一つの命令
それぞれ包含関係でModuleが全てを包含している


LLVM IRの形式
インメモリcompiler-IR
メモリ上のIR表現
ディスク上のビットコード表現
アセンブリ形式の表現
これのみが人間でも読めるもの(?)

基本的な中間表現
きつねさん p.38~がすごい詳しい
Data Layout
データの配置方法

.ll のBasicBlockの遷移をグラフにする
手順
$ opt -S hoge.ll -dot-cfg
$ dot -Teps .main.dot -o hoge.eps
以下のような画像が出力される



参考