我试图弄清楚为什么 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
使用标准数组表示法对同一操作进行循环矢量化可以正常工作。