我想從LLVM IR中提取常量以進一步分析。到目前爲止,我已經能夠通過使用適當的方法提取整數,浮點數和雙精度。在LLVM IR中區分float和double
如何在嘗試從APF類中的方法獲取值之前區分浮動和雙精度。沒有適當的檢查,我最終會觸發一個斷言,當我調用convertToFloat()
上的雙精度浮點數或convertToDouble()
。在嘗試獲取值之前,LLVM中是否存在一些間接機制來區分數據類型?
我想從LLVM IR中提取常量以進一步分析。到目前爲止,我已經能夠通過使用適當的方法提取整數,浮點數和雙精度。在LLVM IR中區分float和double
如何在嘗試從APF類中的方法獲取值之前區分浮動和雙精度。沒有適當的檢查,我最終會觸發一個斷言,當我調用convertToFloat()
上的雙精度浮點數或convertToDouble()
。在嘗試獲取值之前,LLVM中是否存在一些間接機制來區分數據類型?
有幾種方法,最簡單的我能想到的是通過使用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();
如果您知道每個類型的大小,那麼你可以使用C語言的sizeof()的替代功能在這個環節中描述:
謝謝。我認爲我想要做的事情相當微不足道,應該有一些內置的東西可以使用。如果沒有這樣的事情,我想你指出的是解決這個問題的方法之一。 – vPraetor
剛剛通過驗證。他們兩人的工作非常好! – vPraetor