我不确定如何在 LLVM 中创建一个 ConstantInt——我知道我想创建的数字,但我不确定如何制作一个表示该数字的 ConstantInt;我似乎在文档中找不到我需要的构造函数。
我认为它必须沿着
ConstantInt consVal = new ConstantInt(something here).
我知道我希望它是一个 int 类型,并且我知道我的价值……我只想创建一个数字!
我不确定如何在 LLVM 中创建一个 ConstantInt——我知道我想创建的数字,但我不确定如何制作一个表示该数字的 ConstantInt;我似乎在文档中找不到我需要的构造函数。
我认为它必须沿着
ConstantInt consVal = new ConstantInt(something here).
我知道我希望它是一个 int 类型,并且我知道我的价值……我只想创建一个数字!
LLVM 中的大多数东西都是通过静态方法调用创建的,而不是直接使用构造函数。一个原因是可以返回现有对象而不是创建新实例。
ConstantInt的静态成员有许多创建方法。您可能最感兴趣的是get (Type *Ty, uint64_t V, bool isSigned=false)
,如果您还没有整数类型,IntegerType::get (LLVMContext &C, unsigned NumBits)
.
制作一个 32 位整数:
llvm::ConstantInt::get(context, llvm::APInt(/*nbits*/32, value, /*bool*/is_signed));
创建一个32-bit
整数常量:
llvm::Type *i32_type = llvm::IntegerType::getInt32Ty(llvm_context);
llvm::Constant *i32_val = llvm::ConstantInt::get(i32_type, -1/*value*/, true);
ConstantInt* const_int32 = ConstantInt::get( Context , APInt(32, StringRef("10"), 10));
其中,APInt(32, StringRef("10"), 10); 从以 10 为底的字符串“10”获取 int 值。