https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67326

            Bug ID: 67326
           Summary: [5.2/6.0 regression] -ftree-loop-if-convert-stores
                    does not vectorize conditional assignment (anymore)
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vincenzo.innocente at cern dot ch
  Target Milestone: ---

in 5.1 looks ok (according to http://gcc.godbolt.org)

cat condBug.cc 
float v0[1024];
float v1[1024];
float v2[1024];
float v3[1024];

void condAssign1() {
  for(int i=0; i<1024; ++i)
    v0[i] = (v2[i]>v1[i]) ? v2[i]*v3[i] : v0[i];
}


void condAssign2() {
  for(int i=0; i<1024; ++i)
    v0[i] = (v2[i]>v1[i]) ? v2[i]*v1[i] : v0[i];
}

c++ -Ofast -fopt-info-vec -ftree-loop-if-convert-stores -S condBug.cc
condBug.cc:7:3: note: loop vectorized
condBug.cc:13:3: note: loop vectorized
gcc version 4.9.3 (GCC) 

c++ -Ofast -fopt-info-vec -ftree-loop-if-convert-stores -S condBug.cc
condBug.cc:13:17: note: loop vectorized
with gcc version 6.0.0 20150801 (experimental) [trunk revision 226463] (GCC)

Reply via email to