区分LLVM IR中的float和double

时间:2014-03-03 22:59:06

标签: llvm llvm-ir

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

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

2 个答案:

答案 0 :(得分:5)

有几种方法,我能想到的最简单的方法是使用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();

答案 1 :(得分:1)

如果您知道每种类型的大小,那么您可以使用C语言的sizeof()替换函数,如此链接中所述: http://nondot.org/sabre/LLVMNotes/SizeOf-OffsetOf-VariableSizedStructs.txt

相关问题