从教学中阅读元数据

时间:2014-03-03 04:55:50

标签: llvm

我想提取附加到指令的所有元数据信息。我尝试使用getAllMetadata提取此信息。

有人可以解释为什么以下代码不会打印元数据节点的名称吗?

注意:I是一条指令

.
.
.
I->getAllMetadata(MDForInst);

for(SmallVector<std::pair<unsigned, MDNode*>, 4>::iterator II = MDForInst.begin(),
                      EE = MDForInst.end(); II !=EE; ++II){

      outs()<<"name: "<< II->second->getName() << "\n";

}
.
.
.

1 个答案:

答案 0 :(得分:1)

尽管从getName继承了Value方法(以及一些类似的方法),MDNode实际上并没有名称。

如果你有类似的话:

<instruction>, !mymetadata !5

并且您想要字符串“!mymetadata”,您需要使用“kind”值 - 每对中的无符号值 - 从模块中获取自定义元数据名称。代码想要的东西(粗略地,没有自己检查):

SmallVector<StringRef, 8> Names;
M.getMDKindNames(Names);

for(SmallVector<std::pair<unsigned, MDNode*>, 4>::iterator
    II = MDForInst.begin(), EE = MDForInst.end(); II !=EE; ++II) {
  outs() << "name: " << Names[II->first] << "\n";
}