我从一个整数常量中创建了一个llvm::Value*,如下所示:
llvm::Value* constValue = llvm::ConstantInt::get( llvmContext , llvm::APInt( node->someInt() ));
现在我想取回编译时的常量值;
int constIntValue = constValue->???
LLVM Programmer manual中显示的示例似乎暗示cast<>在使用类型(而不是类型加指针)模板参数时将接受指针,但是我非常确定从2.8时起这是失败的:
llvm::Value* foo = 0;
llvm::ConstantInt* intValue = & llvm::cast< llvm::ConstantInt , llvm::Value >(foo );
//build error:
//error: no matching function for call to ‘cast(llvm::Value*&)’
这里的正确方法是什么?
发布于 2012-10-31 17:59:27
Eli的答案很好,但它缺少最后的部分,也就是取回整数。完整的画面应该如下所示:
if (ConstantInt* CI = dyn_cast<ConstantInt>(Val)) {
if (CI->getBitWidth() <= 32) {
constIntValue = CI->getSExtValue();
}
}
当然,如果constIntValue
是64位整数,也可以将其更改为<= 64
,等等。
正如Eli所写的,如果您确信该值确实是ConstInt
类型,那么您可以使用cast<ConstantInt>
而不是dyn_cast
。
https://stackoverflow.com/questions/5315176
复制相似问题