在一些 C 代码中,我将一个简单的静态数组定义为函数参数,例如:
void foo(float color[3]);
当我用 编译它时llvm-gcc
,它会产生以下 LLVM 汇编语言输出:
define void @foo(float* %n1) nounwind ssp {
有什么方法可以向编译器提示我希望它使用堆栈上的 LLVM 数组[3 x float]
或向量<3 x float>
而不是指针来生成代码?
在一些 C 代码中,我将一个简单的静态数组定义为函数参数,例如:
void foo(float color[3]);
当我用 编译它时llvm-gcc
,它会产生以下 LLVM 汇编语言输出:
define void @foo(float* %n1) nounwind ssp {
有什么方法可以向编译器提示我希望它使用堆栈上的 LLVM 数组[3 x float]
或向量<3 x float>
而不是指针来生成代码?
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);
?
一般来说,你不能。它是 C 标准/平台 ABI,它定义了类型的布局等。
如果您想要对 IR 发射进行如此精细的控制,您需要手动进行(或修改 clang 等)