LLVM:如何遍历模块元数据以查找值?

时间:2017-01-19 21:03:24

标签: llvm

我的LLVM模块中有这个元数据树:

!meta.test = !{!0}    
!0 = !{"str1", "str2", !1}
!1 = !{!2, !3, null}
!2 = !{"str3", i8 5}

我希望能够获得价值:i8 5。

我正在尝试使用M-> getNamedMetadata(“meta.test”),但我无法使用LLVM API遍历元数据树以达到该值。

我该怎么做?

干杯。

1 个答案:

答案 0 :(得分:3)

对于LLVM 3.6及更高版本

getNamedMetadata返回NamedMetadata,您可以使用getOperand(unsigned)获取MDNode,并根据您的使用情况投出相应的类型。

所以M->getNamedMetadata("meta.test")->getOperand(0)会让你metadataNode !0 MDNode

您可以使用cast< ValueAsMetadata >(MDNode)->getvalue()获取Value i8 5

或者您可以使用cast< MDString >(MDNode)->getString()获取Value str1

因此,您可以使用MDNodes调用遍历元数据getOperand(),并根据层次结构将其投射到您的使用中。有关详细信息,请参阅this