てけもぐ Tech 忘備録

LLVM-C API を使った自作コンパイラでの、ブロックの扱い方の話

対象

#LLVM-C 初学者

内容

https://github.com/mzuhi5/tiny_c_compiler の話の続き。

LLVM-C API のブロックについて、ひとつだけメモして置きたいことがあった。

それは、現在の IR 挿入位置を LLVM が記憶しているぞっ、ってこと。

コードを追加する命令もあればしない命令もあるので、今どこにあるのかをいじりながらブロックやコードを入れる。

LLVMPositionBuilderAtEnd() でブロックの末尾ポジションに移動してからコードを挿入したり、LLVMGetInsertBlock() で現在の挿入位置を取得したりして希望の場所に移動してからコードを加える。ブロックが所属する親ブロックを取得するには、LLVMGetBasicBlockParent() で、これで関数のブロックを取得。

if 文を作成するときなど、ブロック自体は飛び先として、その内容より先に必要だったりする。