1

在一些 C 代码中,我将一个简单的静态数组定义为函数参数,例如:

void foo(float color[3]);

当我用 编译它时llvm-gcc,它会产生以下 LLVM 汇编语言输出:

define void @foo(float* %n1) nounwind ssp {

有什么方法可以向编译器提示我希望它使用堆栈上的 LLVM 数组[3 x float]或向量<3 x float>而不是指针来生成代码?

4

2 回答 2

1

void foo(float color[3]);由 C 标准定义为等效于void foo(float *color);. 也许你想要void foo(float (*color)[3]),或者struct vec { float elems[3]; }; void foo(struct vec color);

于 2011-09-27T07:41:59.210 回答
0

一般来说,你不能。它是 C 标准/平台 ABI,它定义了类型的布局等。

如果您想要对 IR 发射进行如此精细的控制,您需要手动进行(或修改 clang 等)

于 2011-09-27T07:55:40.290 回答