LLVM访问变量

时间:2018-09-25 00:34:19

标签: assembly llvm llvm-ir

我知道如何在LLVM代码中存储int变量'x',我将使用以下命令:

  store i32 1, i32* %x

如果我然后想拉出'%x'并将其用于诸如add之类的命令中,我该怎么做?

%Temp1 = add i32 1, %x

基本询问如何引用商店

1 个答案:

答案 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指令返回计算结果,该指令也是构成此示例函数的单个基本块的唯一终止符。