2

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

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

4

2 回答 2

5

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

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

顺便说一句,如果你有的话,更常见的是只Value检查来自的类型:APFloat

bool IsFloat = MyValue.getType()->isFloatTy();
bool IsDouble = MyValue.getType()->isDoubleTy();
于 2014-03-04T05:43:44.320 回答
1

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

于 2014-03-04T01:54:15.660 回答