0

我试图弄清楚为什么 gcc 4.9.0 在使用 gcc 4.9.0 时不会矢量化简单的数组加法,使用 -O -ftree-vectorize:

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 回答