2014-03-03 130 views
2

我想從LLVM IR中提取常量以進一步分析。到目前爲止,我已經能夠通過使用適當的方法提取整數,浮點數和雙精度。在LLVM IR中區分float和double

如何在嘗試從APF類中的方法獲取值之前區分浮動和雙精度。沒有適當的檢查,我最終會觸發一個斷言,當我調用convertToFloat()上的雙精度浮點數或convertToDouble()。在嘗試獲取值之前,LLVM中是否存在一些間接機制來區分數據類型?

回答

4

有幾種方法,最簡單的我能想到的是通過使用the getSemantics method

bool IsFloat = MyFloat.getSemantics() == &APFloat::IEEEsingle; 
bool IsDouble = MyFloat.getSemantics() == &APFloat::IEEEdouble; 

順便說一句,這是比較常見的,只是檢查Value的是,從APFloat,附帶的類型,如果您有它:

bool IsFloat = MyValue.getType()->isFloatTy(); 
bool IsDouble = MyValue.getType()->isDoubleTy(); 
+0

剛剛通過驗證。他們兩人的工作非常好! – vPraetor

1

如果您知道每個類型的大小,那麼你可以使用C語言的sizeof()的替代功能在這個環節中描述: ​​

+0

謝謝。我認爲我想要做的事情相當微不足道,應該有一些內置的東西可以使用。如果沒有這樣的事情,我想你指出的是解決這個問題的方法之一。 – vPraetor