gpt4 book ai didi

Clang 拆分函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:40 24 4
gpt4 key购买 nike

如果您使用“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 的参数一分为二?有什么办法可以阻止它这样做吗?我希望能够从其他 LLVM 生成的代码调用它,这些代码只需要 foo 的一个参数。

最佳答案

由于 LLVM 没有办法表示它,所以 Clang 以这种方式对平台 ABI 进行编码。在这个特定的例子中,它是按值传递的结构,这是非常特定于 ABI 的。如果您向 clang 提供不同的目标三元组,您会注意到这一点 - 您会注意到发出的代码不同。我从问题中假设这是在可以在寄存器中传递结构的 x64 机器上运行的。

关于Clang 拆分函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19525909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com