这些可能是非常基本的问题..
1)什么是LLVM元数据,如何在我的程序中使用它?我已经阅读了所有文档,但我不明白如何使用它。
2)如何在文件中添加个人元数据?
提前致谢!
答案 0 :(得分:5)
最佳信息来源是2010年的博客文章,该文章将元数据引入LLVM IR - Extensible Metadata in LLVM IR。第一段提到了动机:
此元数据可用于影响特定语言 优化传递(例如,C中基于类型的别名分析),标记 自定义代码生成器的信息,或传递信息 链接时间优化。
但是,重新阅读,阅读所有if if for historical details。
LLVM中元数据的主要“客户端”目前是debug info。前端(例如Clang)使用它来标记它生成的LLVM IR,其调试信息将IR与其来源的源代码相关联。稍后将相同的元数据转换为特定于平台的调试信息,例如代码发射器的DWARF。
答案 1 :(得分:0)
这是一个简单的例子:
llvm::LLVMContext &Ctx = LLMod.getContext();
llvm::IntegerType *Int32Ty = llvm::Type::getInt32Ty(Ctx);
llvm::Metadata *MapleVerElts[] = {
llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(Int32Ty, 0)),
llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(Int32Ty, 1)),
};
llvm::NamedMDNode *MapleVerMD
= LLMod.getOrInsertNamedMetadata("maple-as.version");
MapleVerMD->addOperand(llvm::MDNode::get(Ctx, MapleVerElts));
const MPLModule::FunctionListType &FuncList = Mod.getFunctionList();
LLMod.dump();
您可能会得到以下输出:
!maple-as.version = !{!0}
!0 = !{i32 0, i32 1}
也许它将为您提供使用MetaData的简单提示^^