在 LLVM IR 中将变量设置为 0

Setting a variable to 0 in 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

要将值设置为零(或通常为 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);

LLVM-IR是静态单赋值(SSA)形式,所以每个变量只赋值一次。如果您想为内存区域分配一个值,您可以简单地使用示例中所示的存储操作:

store i32 3, i32* %ptr     

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