てけもぐ Tech 忘備録

LLVM-C API を使った自作コンパイラでの型の管理

対象読者

LLVM-C API 初学者

解決すること

LLVM-C API を使った自作コンパイラ作成の際に変数をどう扱ったのか、メモ

内容

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

LLVM-C API を使ってコードジェネレータの部分を書いている時に、変数についてはメモリの割当も当然 LLVM-C でやるので、1度宣言した変数やその型を LLVM 側から取得できないかとやってみてたのですが、結局型がちゃんと取れないので断念。ポインタ型が汎用ポインタとして登録・管理され、その先どの型を指すのか分からない。でも deref する時にはもちろん型情報は当然必要。前は LLVM 側で持っていたらしいけど、ver15 にて変更されたとか。

https://llvm.org/docs/OpaquePointers.html

関数とかは LLVM-C 経由取れたりするけども、他は無理なのでコンパイラの方で変数と型を保持して管理。