When dissolving an SLP-only group of accesses, we should only set
the gap to group_size - 1 for normal non-strided groups.
2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR tree-optimization/92677
* tree-vect-loop.c (vect_dissolve_slp_only_groups): Set the gap
to zero when dissolving a group of strided accesses.
gcc/testsuite/
PR tree-optimization/92677
* gcc.dg/vect/pr92677.c: New test.
From-SVN: r278852
+2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/92677
+ * tree-vect-loop.c (vect_dissolve_slp_only_groups): Set the gap
+ to zero when dissolving a group of strided accesses.
+
2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/92596
+2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/92677
+ * gcc.dg/vect/pr92677.c: New test.
+
2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/92596
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+
+int a, c;
+int *b;
+long d;
+double *e;
+
+void fn1() {
+ long f;
+ double g, h;
+ while (c) {
+ if (d) {
+ g = *e;
+ *(b + 4) = g;
+ }
+ if (f) {
+ h = *(e + 2);
+ *(b + 6) = h;
+ }
+ e += a;
+ b += 8;
+ c--;
+ d += 2;
+ }
+}
DR_GROUP_FIRST_ELEMENT (vinfo) = vinfo;
DR_GROUP_NEXT_ELEMENT (vinfo) = NULL;
DR_GROUP_SIZE (vinfo) = 1;
- DR_GROUP_GAP (vinfo) = group_size - 1;
+ if (STMT_VINFO_STRIDED_P (first_element))
+ DR_GROUP_GAP (vinfo) = 0;
+ else
+ DR_GROUP_GAP (vinfo) = group_size - 1;
vinfo = next;
}
}