LLVM-C API を使った自作コンパイラでの、ブロックの扱い方の話
対象
#LLVM-C 初学者
内容
https://github.com/mzuhi5/tiny_c_compiler の話の続き。
LLVM-C API のブロックについて、ひとつだけメモして置きたいことがあった。
それは、現在の IR 挿入位置を LLVM が記憶しているぞっ、ってこと。
コードを追加する命令もあればしない命令もあるので、今どこにあるのかをいじりながらブロックやコードを入れる。
LLVMPositionBuilderAtEnd() でブロックの末尾ポジションに移動してからコードを挿入したり、LLVMGetInsertBlock() で現在の挿入位置を取得したりして希望の場所に移動してからコードを加える。ブロックが所属する親ブロックを取得するには、LLVMGetBasicBlockParent() で、これで関数のブロックを取得。
if 文を作成するときなど、ブロック自体は飛び先として、その内容より先に必要だったりする。