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 作成時にキャストを詰め込んだ。