我有我的LLVM模塊元數據樹:LLVM:如何遍歷模塊元數據以查找值?
!meta.test = !{!0}
!0 = !{"str1", "str2", !1}
!1 = !{!2, !3, null}
!2 = !{"str3", i8 5}
我希望能夠得到的值:6-18 5.
我想它使用M-> getNamedMetadata(「meta.test 「),但我無法使用LLVM API遍歷元數據樹來達到該值。
我該怎麼做?
乾杯。
我有我的LLVM模塊元數據樹:LLVM:如何遍歷模塊元數據以查找值?
!meta.test = !{!0}
!0 = !{"str1", "str2", !1}
!1 = !{!2, !3, null}
!2 = !{"str3", i8 5}
我希望能夠得到的值:6-18 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
。
因此總之,您可以使用getOperand()
調用遍歷元數據MDNodes
,並根據層次結構將其轉換爲您的用途。有關更多信息,請參閱this。
謝謝,就是這樣!我無法在官方文檔中找到如何遍歷元數據。這些演員是我需要的。 – jesusgumbau
你得到什麼錯誤和什麼llvm api版本? –
@lazyCoder:我沒有收到任何錯誤,我只是沒有找到合適的API調用來獲取這些數據。什麼是適當的電話? – jesusgumbau