在 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位长整数的指针。
是否可以在 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位长整数的指针。