1
如果您編譯下面的 「鐺-S -emit-LLVM struct.c」鏘分割函數參數
struct _mystruct {
long long int a;
long long int b;
};
struct _mystruct foo(struct _mystruct s) {
s.a += 1;
return s;
}
int main(void) {
struct _mystruct s;
s.a = 8;
s.b = 9;
s = foo(s);
return s.a;
}
...你(除其他事項外):
define { i64, i64 } @foo(i64 %s.coerce0, i64 %s.coerce1) #0 {
爲什麼鏗鏘將這個論點分成兩部分呢?有什麼辦法可以阻止它這樣做嗎?我希望能夠從其他LLVM生成的代碼中調用它,這些代碼只需要foo的一個參數。
傳遞一個指針? –
您確定LLVM不會生成正確的調用代碼嗎?我懷疑它會做正確的事情。在C代碼中傳遞一個結構體,llvm將變爲兩個long。我錯過了什麼嗎? –
調用它的代碼將使用LLVM生成,但不是鏗鏘聲。 – brooks94