LLVM IRを読みたい
コード例
lldefine i32 @main(i32 %argc, i8** %argv) {
...
}
%argc
, %argv
は型を持ったレジスタ
型 名前
の感じなのね

@
と %
@
はglobalな変数のprefix
%
はlocalな変数のprefix
ラベル
jumpするときに使う
種類
int
boolは i1
で表現
ex. i1
, i32
など iN
で表現
float, double
pointer
Cと同じ様に *
で表現
配列
[サイズx型]
で表現
ex. [4 x i64]
ベクタ
<サイズx型>
で表現
構造体
{型, 型, ...}
void
関数型
ラベル型
token型
Metadata型
GEP
GetElementPtr
わかりやすい
LLVM IRに getelementptr
という命令がある
llgetelementptr <元の型>, <ベースのアドレス>, <配列や構造体などのインデックス>
最後の <配列や構造体などのインデックス>
は複数個ある場合もある
元の型ってなに

変数のアドレスを計算する
lli8* getelementptr inbounds ([4 x i8], [4 x i8]* @putNumForm, i32 0, i32 0)
命令
alloca
store
アドレスへ値を書き込む
load
メモリアドレスの読み込み
参考