在函数中,我想知道参数是如何传递到函数体中的,以便跟踪参数的流向。我试了一个简单的代码,并发现似乎有一个alloc
- store
模式为每个参数,我想知道它是否是真的?Clang如何为函数参数生成代码?
甲演示代码是
int add(int x, int y){
return x+y;
}
IR它产生的LLVM是:
; Function Attrs: nounwind uwtable
define i32 @add(i32 %x, i32 %y) #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
store i32 %x, i32* %1, align 4
store i32 %y, i32* %2, align 4
%3 = load i32, i32* %1, align 4
%4 = load i32, i32* %2, align 4
%5 = add nsw i32 %3, %4
ret i32 %5
}
在我们可以看到,例如,
对于每一个参数,所述锵使用
alloc
指令来定义 局部变量继
alloc
指令后,store
指令是用来给 赋值的吗?
我的问题是:
- 是所有功能LLVM IR在此
alloc
和store
模式产生的?或者LLVM如何处理这些参数? parameters
的顺序是由它使用的惯例决定的?
次要评论:您似乎在问如何clang生成LLVM IR,而不是LLVM如何生成代码。 –
@IsmailBadawi感谢您的评论,我编辑了这个问题。 – Qoros