我的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

10-07 22:57