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.