我的LLVM模块中有这个元数据树:
!meta.test = !{!0}
!0 = !{"str1", "str2", !1}
!1 = !{!2, !3, null}
!2 = !{"str3", i8 5}
我希望能够获得价值:i8 5。
我正在尝试使用M-> getNamedMetadata(“meta.test”),但我无法使用LLVM API遍历元数据树以达到该值。
我该怎么做?
干杯。
答案 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。