是否可以在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
答案 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);