如何从Value获取精确的整数

时间:2013-09-06 02:42:55

标签: c++ llvm

我有一个名为indexValue的Value *类型,类型为i32。 我认为indexValue必须包含一个类型为int的数字。 现在我想使用indexValue指向的确切数字, 所以我喜欢这个:

ConstantInt* CI = llvm::cast<llvm::ConstantInt>(indexValue); //This is wrong, so is dyn_cast.

uint64_t index = indexValue->getZExtValue();

uint64_t size = index + 1;

我不知道这是不是正确的方法。 那么,任何人都可以告诉从Value *获取整数内容的方式,类型是i32吗?

如果有任何答案,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您勾画的方式或多或少是正确的 - this related question中也有更完整的答案。但这当然是假设值为ConstantInt

如果您希望某个值为常量但不是,则应确保首先运行其中一个constant propagation passes。如果值仍然不是常数,那么除了可能编写自己专门的常量传播通道外,你无能为力......