在LLVM IR中将变量设置为0

时间:2015-07-03 04:00:40

标签: llvm llvm-ir

是否可以在LLVM-IR中将变量设置为0(或任何其他数字)?我的搜索找到了以下3行代码片段,但是有什么比以下解决方案更简单吗?

%ptr = alloca i32                               ; yields i32*:ptr
store i32 3, i32* %ptr                          ; yields void
%val = load i32, i32* %ptr                      ; yields i32:val = i32 3

2 个答案:

答案 0 :(得分:1)

LLVM-IR采用静态单一分配(SSA)形式,因此每个变量仅分配一次。如果要为内存区域分配值,只需使用示例中显示的存储操作:

store i32 3, i32* %ptr     

第二个参数的类型是i32*,这意味着它是一个指向32位长整数的指针。

答案 1 :(得分:0)

要将值设置为零(或一般为null),您可以使用

Constant::getNullValue(Type)

并设置一个具有任意常数的值,您可以使用ConstantInt::get(),但您需要先识别上下文,如下所示:

LLVMContext &context = function->getContext();
/* or BB->getContext(), BB can be any basic block in the function */
Value* constVal = ConstantInt::get(Type::getInt32Ty(context), 3);