首页 > 解决方案 > 如何在 LLVM 传递中插入存储变量地址的指令?

问题描述

如果 x 是一个整数变量,即 int x;-> %x=alloca i32

我想通过传递将指令 %add = &(%x) 插入到我的 IR 代码中。

这可以通过 GEP 指令或任何其他方式实现吗?我的意思是,%add = gep(x)。

我最初的 IR,

  %i = alloca i32, align 4
  store volatile i32 50, i32* %i, align 4

对于 C 代码

i=50;

我想写一个通行证,从中得到修改后的 IR,如下所示,

修改后的红外,

  %i = alloca i32, align 4
  store volatile i32 50, i32* %i, align 4
  %i_addr = (Get address of i)

感谢并感谢您的帮助:)

标签: clangllvm

解决方案


%i已经是变量的地址i——你可以看到它的类型是i32*,它是一个指针。要获得i(在您的示例中为 50)的值,您需要一条load指令。


推荐阅读