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 に答える