てけもぐ Tech 忘備録

LLVM-C API での自作コンパイラ作成時の、型の一致の話

対象読者

LLVM-C 初学者

解決すること

LLVM-C API を使った自作コンパイラ作成の時の、型キャストについての注意点

内容

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

以前 x86-64 のアセンブリを吐くコードジェネレータも作ったが、それよりも LLVM-C でやるときの方が型の一致はちゃんとやらないと駄目。IR のコンパイル時に型の不一致で怒られる。

アセンブリを吐く時は、小さいデータをそのまま push/pop してもデカイ型の中の小さな数値として扱われるけども、LLVM の場合は IR に型情報全部付いているので駄目。

四則演算や代入など AST の左右の全部で型の不一致を確認してキャストを挟む必要あり。

AST を組んだ後で Node を走査してこれをするのがまとまりはいいが、作成したコードは行数の短さを優先して AST 作成時にキャストを詰め込んだ。