2013-04-27 31 views
5

我不知道如何在LLVM中创建ConstantInt - 我知道我想创建的数字,但我不确定如何使ConstantInt表示该数字;我似乎无法在文档中找到我需要的构造函数。如何在LLVM中创建ConstantInt?

我想那一定是沿着

ConstantInt consVal = new ConstantInt(something here). 

我知道,我想这是一个int类型的线,我知道我的价值......我只是想创建一个数字!

+3

这可能有所帮助:http://stackoverflow.com/questions/9196009/set-value-for-llvmconstantint – acdcjunior 2013-04-27 00:44:47

回答

7

LLVM中的大部分内容都是通过静态方法调用创建的,而不是直接使用构造函数。原因之一是可以返回现有对象而不是创建新实例。

static members of ConstantInt有许多创建方法。你可能最感兴趣的是get (Type *Ty, uint64_t V, bool isSigned=false),如果你还没有整数类型的话,IntegerType::get (LLVMContext &C, unsigned NumBits)

+0

那么我将如何去创建它?我目前正在尝试 ConstantInt :: get(Int64Ty,iVal) 而那不工作......我得到的是我如何告诉它它是一个没有它抱怨我的Int64Type。我试过类型:: Int64Ty和其他变种没有成功。 – winepretzel 2013-04-27 04:11:35

+0

@winepretzel如果你遇到编译错误或类似问题,你应该添加你正在尝试的代码和错误信息。 – 2013-04-27 16:05:50

3

若要使一个32位整数:

llvm::ConstantInt::get(context, llvm::APInt(/*nbits*/32, value, /*bool*/is_signed)); 
0

要创建32-bit整数常数:

llvm::Type *i32_type = llvm::IntegerType::getInt32Ty(llvm_context); 
llvm::Constant *i32_val = llvm::ConstantInt::get(i32_type, -1/*value*/, true); 
1
ConstantInt* const_int32 = ConstantInt::get(Context , APInt(32, StringRef("10"), 10)); 

其中, APINT(32,StringRef( “10”), 10); 从基数为10的字符串“10”获得int值。