LLVMフレームワークの学習では、メソッドが呼び出されたときに実行時に各メソッドの名前を出力する「最適化」パスを実装しようとしています。LLVM:関数パスからのグローバル変数へのアクセス
私はグローバル変数だけモジュールパスに作成する必要があることを読んで、私はそこに文字列(機能ごとに1つ)を作成し、
Constant* data = ConstantDataArray::getString(M.getContext(), F.getName());
GlobalVariable* gvar =
new GlobalVariable(M,
data->getType(),
true,
GlobalValue::ExternalLinkage,
data,
"fname_" + F.getName().str());
でこれは文字列が正しくレイアウトされている限り、正常に動作します'最適化された'ビットコードによって生成されたアセンブリファイル内のメモリに格納されます。
しかし、これらの文字列を関数パスに出力するための呼び出しを挿入する方法が見つかりませんでした。 は私が
Value* string = F.getValueSymbolTable().lookup("fname_" + F.getName().str());
CallInst* call = builder.CreateCall(emitPutS(string, builder, &TLI));
を使用したいが、string
はNULL
として戻ってきます。関数からグローバル変数を参照する良い方法はありますか?