generated at
LLVM IRを読みたい

コード例
HaskellでLLVMを触るで出力したやつ


LLVM IRの関数定義 ref
ll
define i32 @main(i32 %argc, i8** %argv) { ... }
%argc , %argv は型を持ったレジスタ
型 名前 の感じなのねmrsekut

@ %
@ はglobalな変数のprefix
% はlocalな変数のprefix


ラベル
ll
entry_0:
jumpするときに使う


LLVM IRの型システム ref
種類
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 という命令がある
ll
getelementptr <元の型>, <ベースのアドレス>, <配列や構造体などのインデックス>
最後の <配列や構造体などのインデックス> は複数個ある場合もある
元の型ってなにmrsekut
変数のアドレスを計算する
ll
i8* getelementptr inbounds ([4 x i8], [4 x i8]* @putNumForm, i32 0, i32 0)


命令
alloca
store
アドレスへ値を書き込む
load
メモリアドレスの読み込み


参考
LLVMLLVM IRとリンクがかぶっているかもmrsekut