Как подсказывать типы при компиляции с llvm-gcc? - PullRequest
1 голос
/ 27 сентября 2011

В некотором C-коде я определяю простой статический массив как аргумент функции, скажем:

void foo(float color[3]);

Когда я компилирую его с помощью llvm-gcc, он выдает следующий вывод на языке ассемблера LLVM:

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

Можно ли как-нибудь намекнуть компилятору, что я бы хотел, чтобы он генерировал код, используя массив LLVM [3 x float] или вектор <3 x float> в стеке вместо указателя?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

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);?

0 голосов
/ 27 сентября 2011

Вообще говоря, вы не можете. Это стандарт C / ABI платформы, который определяет расположение ваших типов и т. Д.

Если вам нужен такой точный контроль над ИК-излучением, вам нужно будет сделать это руками (или изменить лязг и т. Д.)

...