2017-06-13 5 views
0

とLLVMのメタデータノードを作成し、私はSO上でいくつかの記事を参照してください - 私も中にいくつかのコードを参照してくださいHow to add a Metadata String to an LLVM module with the C++ API?言語リファレンスはLLVMのメタデータについて多くのことを言及しながら、</p> <p>をconstantInt

LLVMソース - http://llvm.org/doxygen/DIBuilder_8cpp_source.html

ただし、特定の幅のConstantIntを含むMDNodeを作成する方法については言及していません。

関連するコード動作しません)されて後 -

std::vector<Metadata*> Elts = 
{ 
     ConstantInt::get(TheContext,APInt(returnType->getIntegerBitWidth(),decimal_val)) 
}; 



MDNode* Node = MDNode::get(TheContext, Elts); 
callInst->setMetadata(LLVMContext::MD_range,Node); 

は、誰もがこれを行うことができますどのように説明できますか?

ありがとうございます!

答えて

1

LLVM IRにメタデータを挿入する方法については、this小さな投稿と書いてあります。それを参照することができます。これを実現するには、基本的にConstantAsMetadataを使用する必要があります。

+0

ありがとうございます!私はちょうど答えを見つけましたが、投稿するのを忘れました.. – mal

0

明らかにllvmクラス階層をチェックし、MetaDataのサブクラス をチェックしました。私はいくつかのクラスを発見し、そのうちの一つだった - ConstantAsMetadata

私の作品上記のコードで変更がある -

std::vector<Metadata*> Elts = { 
    ConstantAsMetadata::get(ConstantInt::get(TheContext,APInt(returnType,0))), 

ConstantAsMetadata::get(ConstantInt::get(TheContext,APInt(returnType,decimal_val)))  

    }; 

- (あなたが正しいことをしたい場合)あなたが指定する必要があります作成しようとしている各範囲の数値のペア。

llvmで提供されているベリファイアパスを使用している場合、イニシャライザ内に単一のConstantIntがあれば、上記はうまく動作しません。 これは、llvmによって提供されたVerifierパス内のアサートのためです。

関連する問題