チュートリアルを実行して、LLVM http://llvm.org/releases/3.1/docs/tutorial/を使用しておもちゃのコンパイラーを作成しました が、シンボルテーブルの処理についてはあまり説明していません。ビットコードファイルを入力として受け取るシンボルテーブルを表示するコマンドllvm-nmがあります。関数名のみを返します。LLVMコンパイラは、シンボルテーブルなしでローカル変数とループ変数をどのように処理しますか?そうでない場合は、シンボルテーブルがどのように処理されるか
質問する
3036 次
1 に答える
5
IRのLLVMインメモリ表現は、シンボルテーブルを使用しません。命令には、オペランド(およびそのユーザー)への直接メモリリンクが含まれているため、命令があり、そのオペランドにアクセスしたい場合は、リンクをたどるだけで、シンボルテーブルでルックアップを実行する必要はありません。
LLVMコンテキスト、モジュール、関数、および基本ブロックに関連付けられたリストがいくつかあり、含まれている要素にアクセスできますが、それらはほとんどが単なるリストであり、名前を何かに関連付けるテーブルではありません。
もちろん、テキストのIRファイル(ll)を解析する場合は、シンボルテーブル(または同様のもの)を使用して、上記のリンクを作成する必要があります。しかし、LLVMにそのようなパーサーがすでに含まれていることを確認する理由はほとんどありません(そして、そのパーサーは実際に「名前」を値に関連付けるために何らかの方法を使用します-の実装を参照してくださいBitcodeReader
)。
IRを生成するためのLLVMフロントエンドに関しては-それはあなた次第です。Cのような言語を解析したい場合は、シンボルテーブルを使用すると非常に便利だと思います。
于 2012-11-01T11:42:59.727 に答える