以下を「clang -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 {
clang が foo への引数を 2 つに分割するのはなぜですか? それを防ぐ方法はありますか?foo への引数を 1 つだけ期待する他の LLVM 生成コードから呼び出すことができるようにしたいと考えています。