我知道如何在LLVM代码中存储int变量'x',我将使用以下命令:
store i32 1, i32* %x
如果我然后想拉出'%x'并将其用于诸如add
之类的命令中,我该怎么做?
%Temp1 = add i32 1, %x
基本询问如何引用商店
答案 0 :(得分:1)
其中一位评论者回答,解决方案是使用加载指令。 在LLVM中使用存储指令时,您将写入一些内存地址。
要读取所述变量并将其保存到虚拟寄存器中,请使用装入指令。
例如,考虑以下将两个整数相加的函数。
define i32 @add(i32, i32) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%5 = load i32, i32* %3
%6 = load i32, i32* %4
%7 = add i32 %5, %6
ret i32 %7
}
前两行在堆栈上为大小为四个字节的两个整数分配内存。然后,我们将函数参数的值写入这些位置。 在使用add之前,我们将这两个变量从内存加载到虚拟寄存器%5和%6中。然后执行add指令,并将结果分配给虚拟寄存器%7。
然后,我们使用ret指令返回计算结果,该指令也是构成此示例函数的单个基本块的唯一终止符。