2011-08-07 7 views
4

LLVMモジュールにmetadata stringを追加しようとしています。私がしようとしているもののストリップダウンバージョン私はそれをコンパイルして実行することができますC++ APIを使用してLLVMモジュールにメタデータ文字列を追加する方法は?

#include <llvm/LLVMContext.h> 
#include <llvm/Module.h> 
#include <llvm/Metadata.h> 

using namespace llvm; 

int main() { 
    Module* module = new Module("test", getGlobalContext()); 
    MDString::get(module->getContext(), "test"); 
    module->dump(); 
} 

です:

Desktop% g++ llvm.cc -o llvm `llvm-config --cppflags --ldflags --libs all` 
Desktop% ./llvm 
; ModuleID = 'test' 

しかし、1が見ることができるように、メタデータは表示されません。

何とか文字列をモジュールに追加できますか? module自体は、指定されたメタデータへのアクセスしか提供していないようです。今どこから見えるかは分かりません。助言がありますか?

補足:あなたのモジュールにメタデータ文字列を浮かべることができないという気持ちがありました。名前付きメタデータノードに追加する必要があるようです。そうですか?私はあなたが言うように「漂って」のメタデータを持つことができるかどうかわからない

#include <llvm/LLVMContext.h> 
#include <llvm/Module.h> 
#include <llvm/Metadata.h> 

using namespace llvm; 

int main() { 
    Module* module = new Module("test", getGlobalContext()); 

    Value *Elts[] = { 
    MDString::get(module->getContext(), "test1") 
    }; 
    MDNode *Node = MDNode::get(getGlobalContext(), Elts); 

    NamedMDNode *NMD = module->getOrInsertNamedMetadata("test2"); 
    NMD->addOperand(Node); 

    module->dump(); 
} 

答えて

4

はこれを試してみてください。あなたのプログラムのどの部分にも添付されていなければ、それは何をしているのですか?私は最近MDを少し調べています... lib/Analysis/DIBuilder.cppに同様のコードがあります。がんばろう。

+0

ありがとう、これはよさそうです。私はそれをモジュールに付け加えることができたと思ったが、もしそれが明確であると思うなら、それが名前を持たないなら、どうすれば後の段階で見つけることができるだろうか? –

関連する問題