https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84261
Bug ID: 84261
Summary: gcc fails to call a simd-vectorized function
Product: gcc
Version: 7.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: marcin.krotkiewski at gmail dot com
Target Milestone: ---
Consider the following vectorized functions (omp declare simd):
#include <math.h>
#pragma omp declare simd simdlen(4)
double test1(double v1)
{
for(int i=0; i<4; i++){
v1 = exp(v1);
}
return v1;
}
#pragma omp declare simd simdlen(4)
double test2(double v1)
{
v1 = exp(v1);
v1 = exp(v1);
v1 = exp(v1);
v1 = exp(v1);
return v1;
}
I used GCC versions up to 7.3. Code compiled with -fopenmp -O3 -ffast-math
-march=haswell.
In the test1 case GCC generates scalar calls to exp, while in the second case
(test2) calls to exp are vectorized, as expected.
Is there a reason for such behaviour? Because it sure looks like something is
wrong. Would some flag convince gcc to vectorize?