我想提取附加到指令的所有元数据信息。我尝试使用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";
}
.
.
.
答案 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";
}