什么是LLVM元数据

时间:2013-11-02 16:04:46

标签: llvm

这些可能是非常基本的问题..

1)什么是LLVM元数据,如何在我的程序中使用它?我已经阅读了所有文档,但我不明白如何使用它。

2)如何在文件中添加个人元数据?

提前致谢!

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的简单提示^^