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

            Bug ID: 93771
           Summary: SLP produces VEC_PERM when should have used vector
                    generation
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

Take:
void f(double *a, double *t, double *d)
{
  double t1 = t[0] + d[0];
  double t2 = t[3] + d[1];
  a[0] = t1;
  a[1] = t2;
}

---- CUT ---
This produces:
  vect__1.13_14 = MEM <vector(2) double> [(double *)t_6(D)];
  vect__1.14_16 = MEM <vector(2) double> [(double *)t_6(D) + 16B];
  vect__1.15_17 = VEC_PERM_EXPR <vect__1.13_14, vect__1.14_16, { 0, 3 }>;
  vect__2.18_19 = MEM <vector(2) double> [(double *)d_7(D)];
  vect_t1_8.19_20 = vect__1.15_17 + vect__2.18_19;
  MEM <vector(2) double> [(double *)a_10(D)] = vect_t1_8.19_20;

BUT that VEC_PERM_EXPR is not so good here. we only need to load t[0] and t[1]
and create a vector from those two.

Reply via email to