Pointers LLVM:识别引用

Pointers LLVM:识别引用,pointers,reference,llvm,Pointers,Reference,Llvm,如何在llvm中识别变量的地址。例如: int g; int *v; int *test() { v = &g func(&g) return &g } 在LLVM中,正在获取地址: store i32* @g, i32** @v, align 4 call i32 @func(i32* @g) ret i32* @g 我想知道是采用地址还是采用变量的值。谢谢你的回答。一般来说,没有办法说明这一点。在某些情况下,获取特定事物的地址可能会

如何在llvm中识别变量的地址。例如:

int g;
int *v;
int *test() {
   v = &g       
   func(&g)
   return &g
}
在LLVM中,正在获取地址:

store i32* @g, i32** @v, align 4
call i32 @func(i32* @g)
ret i32* @g

我想知道是采用地址还是采用变量的值。谢谢你的回答。

一般来说,没有办法说明这一点。在某些情况下,获取特定事物的地址可能会被优化。编译器可能会选择通过指针传递某些内容,即使不是这样编写的


你可能会更好地使用LILCLAN在C++语法树上操作,我认为这是可能的。p> 全局变量的名称总是LLVM中的地址。是的,我知道。但是我想知道全局变量的地址是什么时候存储的,等等,而不是这个全局变量的值。例如,别名分析可能会有所帮助,但我不知道使用哪种方法或什么来识别这种情况。但我想识别全局变量的地址是何时存储的,等等,而不是此全局变量的值。例如,别名分析可能会有所帮助,但我不知道使用哪种方法或什么来识别这种情况。@JaroKollár GlobalVariable始终具有PointerType,它表示地址。其他分配的内存也是如此。从这个意义上讲,源代码中显式定义的变量应该始终是平凡的指针类型,因为它们将驻留在内存中,而不是经过优化。此外,我猜有几个别名分析,例如basicaa?通过定义/使用指针计算,而不是相反。地址是什么?只要AllocaInst/GlobalVariable未加载,引用/使用它的任何其他指令都将加载。