区分LLVM IR中的float和double

vPr*_*tor 2 llvm llvm-ir

我试图从LLVM IR中提取常量以进行进一步分析.到目前为止,我已经能够使用适当的方法提取整数,浮点数和双精度数.

在尝试从APF类中的方法中获取值之前,如何区分浮点数和双精度数.如果没有适当的检查,当我调用convertToFloat()double或convertToDouble()on float 时,我最终会触发一个断言.在尝试获取值之前,LLVM中是否有一些间接机制来区分数据类型?

Oak*_*Oak 5

有几种方法,我能想到的最简单getSemantics方法是使用方法:

bool IsFloat = MyFloat.getSemantics() == &APFloat::IEEEsingle;
bool IsDouble = MyFloat.getSemantics() == &APFloat::IEEEdouble;
Run Code Online (Sandbox Code Playgroud)

顺便Value说一下APFloat,如果你有的话,只需检查一下它的类型就更常见了:

bool IsFloat = MyValue.getType()->isFloatTy();
bool IsDouble = MyValue.getType()->isDoubleTy();
Run Code Online (Sandbox Code Playgroud)