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