0

-O -​​ftree-vectorize を使用して、gcc 4.9.0 を使用しているときに、gcc 4.9.0 が単純な配列の追加をベクトル化しない理由を理解しようとしています。

int a[256], b[256], c[256];
foo () {
  int i;
  a[:] = b[:] + c[:];
}

アセンブラーで生成されたこのループはベクトル化されておらず、-fopt-info-vec-all フラグを使用すると、ベクトル化が失敗した理由を示す多くの出力が得られます。

>testvec.c:5: note: ===== analyze_loop_nest ===== 
>testvec.c:5: note: === vect_analyze_loop_form === 
>testvec.c:5: note: not vectorized: control flow in loop. 
>testvec.c:5: note: bad loop form.

ループ内に制御フローがないため、これは不可解です。for同じ操作に対して標準の配列表記を使用したループのベクトル化は正常に機能します。

4

1 に答える 1

0

あなたの例をベクトル化できるのは、GCC の最新バージョン (6.1) だけのようです。

http://melpon.org/wandbox/permlink/LOIweYNRRLXeJsZf

于 2016-08-25T14:09:51.473 に答える