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

            Bug ID: 120906
           Summary: vectorizer create redudant permutation for reversed
                    access of array
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: liuhongt at gcc dot gnu.org
  Target Milestone: ---

cat test.c

extern int c[32000], d[32000];
void s1113()
{
    for (int i = 32000; i >= 0; i--) {
      c[i] = d[i] + 1;
    }
}

with -march=x86-64-v3 -O3, dump of optimized 


  <bb 3> [local count: 1063004408]:
  # ivtmp.44_17 = PHI <ivtmp.44_18(3), 0(2)>
  # DEBUG i => NULL
  # DEBUG BEGIN_STMT
  vect__1.33_25 = MEM <vector(8) int> [(int *)&d + 127972B + ivtmp.44_17 * 1];
  vect__1.34_26 = VEC_PERM_EXPR <vect__1.33_25, vect__1.33_25, { 7, 6, 5, 4, 3,
2, 1, 0 }>;
  vect__2.35_27 = vect__1.34_26 + { 1, 1, 1, 1, 1, 1, 1, 1 };
  vect__2.38_31 = VEC_PERM_EXPR <vect__2.35_27, vect__2.35_27, { 7, 6, 5, 4, 3,
2, 1, 0 }>;
  MEM <vector(8) int> [(int *)&c + 127972B + ivtmp.44_17 * 1] = vect__2.38_31;
  # DEBUG BEGIN_STMT
  # DEBUG i => NULL
  # DEBUG BEGIN_STMT
  ivtmp.44_18 = ivtmp.44_17 + 18446744073709551584;
  if (ivtmp.44_18 != 18446744073709423616)
    goto <bb 3>; [98.99%]

the 2 vec_perm_expr are redundant

Reply via email to