请参阅这个简单的最小搜索(Godbolt):
float foo(const float *data, int n) {
float v = data[0];
for (int i = 1; i < n; i++) {
float d = data[i];
if (d < v) {
v = d;
}
}
return v;
}
gcc 和 clang 都不会使用-O3
. 如果我使用-ffinite-math-only
,仍然不会发生自动矢量化。我需要使用-ffinite-math-only
和-fno-signed-zeros
编译器自动向量化代码。为什么-fno-signed-zeros
需要自动矢量化?