选项 -free-vect-analyse-slp-group
说明
SLP矢量化阶段,仅进行reduction chains group的分析以及矢量化。在某些无法自动分析最优方案的情况打开该选项进行矢量化控制。
使用方法
在打开矢量化控制开关-ftree-vectorize的基础上,在选项中加入-ftree-vect-analyze-slp-group。
结果
测试用例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | void f(double *a, double *res, double m) { double res1, res0; res1 = 0; res0 = 0; for (int i = 0; i < 1000; i+=8) { res0 += a[i] * m; res1 += a[i+1] * m; res0 += a[i+2] * m; res1 += a[i+3] * m; res0 += a[i+4] * m; res1 += a[i+5] * m; res0 += a[i+6] * m; res1 += a[i+7] * m; } res[0] += res0; res[1] += res1; } |
测试命令:
1 | gcc -O2 -ftree-vectorize -funsafe-math-optimizations -fno-tree-reassoc -ftree-vect-analyze-slp-group -S a.c -o a.s |
图1 选项未打开


图2 选项已打开


观察到该测试用例在选项未打开时和打开后,生成的相关代码有明显差别,打开后可成功矢量化。
父主题: 静态编译优化