首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LLVM从Value*中获取常量整数

LLVM从Value*中获取常量整数
EN

Stack Overflow用户
提问于 2011-03-16 00:58:07
回答 1查看 17.3K关注 0票数 31

我从一个整数常量中创建了一个llvm::Value*,如下所示:

代码语言:javascript
复制
llvm::Value* constValue = llvm::ConstantInt::get( llvmContext , llvm::APInt( node->someInt() ));

现在我想取回编译时的常量值;

代码语言:javascript
复制
int constIntValue = constValue->???

LLVM Programmer manual中显示的示例似乎暗示cast<>在使用类型(而不是类型加指针)模板参数时将接受指针,但是我非常确定从2.8时起这是失败的:

代码语言:javascript
复制
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*&)’

这里的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2012-10-31 17:59:27

Eli的答案很好,但它缺少最后的部分,也就是取回整数。完整的画面应该如下所示:

代码语言:javascript
复制
if (ConstantInt* CI = dyn_cast<ConstantInt>(Val)) {
  if (CI->getBitWidth() <= 32) {
    constIntValue = CI->getSExtValue();
  }
}

当然,如果constIntValue是64位整数,也可以将其更改为<= 64,等等。

正如Eli所写的,如果您确信该值确实是ConstInt类型,那么您可以使用cast<ConstantInt>而不是dyn_cast

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5315176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档