Как подсказывать типы при компиляции с llvm-gcc?
В некотором C-коде я определяю простой статический массив как аргумент функции, скажем:
void foo(float color[3]);
Когда я собираю это с llvm-gcc
, он производит следующий вывод на ассемблере LLVM:
define void @foo(float* %n1) nounwind ssp {
Есть ли способ, которым я могу намекнуть компилятору, что я хотел бы, чтобы он генерировал код, используя массив LLVM [3 x float]
или вектор <3 x float>
в стеке вместо указателя?
2 ответа
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, который определяет расположение ваших типов и т. Д.
Если вы хотите такой точный контроль над ИК-излучением, вам нужно сделать это вручную (или изменить лязг и т. Д.)