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