在函數中,我想知道參數是如何傳遞到函數體中的,以便跟蹤參數的流向。我試了一個簡單的代碼,並發現似乎有一個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