2017-01-19 59 views
1

我有我的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遍歷元數據樹來達到該值。

我該怎麼做?

乾杯。

+0

你得到什麼錯誤和什麼llvm api版本? –

+0

@lazyCoder:我沒有收到任何錯誤,我只是沒有找到合適的API調用來獲取這些數據。什麼是適當的電話? – jesusgumbau

回答

2

對於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

+0

謝謝,就是這樣!我無法在官方文檔中找到如何遍歷元數據。這些演員是我需要的。 – jesusgumbau