选项 -falias-analysis-expand-ssa

说明

增强别名分析能力,有效识别并排除非循环体中相邻数组元素访问的虚假数据依赖关系,促成相邻元素的连续操作被安全矢量化,提升代码执行效率。

使用方法

需开启 -O2 或以上优化等级,同时增加编译选项 -falias-analysis-expand-ssa

结果

测试用例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
void f(double *p, long i)
{
    p[i+0] += 1;
    p[i+1] += 1;
}
void g(double *p, long i)
{
    double *q = p + i;
    q[0] += 1;
    q[1] += 1;
}

测试命令:

1
gcc -O2  -fdump-tree-slp-details -falias-analysis-expand-ssa test.c -S -o test.s
图1 选项未打开时

图2 选项打开后

选项未打开时,对于函数f,编译器认为p[i+0]p[i+1]互为别名,存在依赖关系,矢量化失败。选项打开后,矢量化成功