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 経由取れたりするけども、他は無理なのでコンパイラの方で変数と型を保持して管理。