Commit 7e99af48 by Richard Sandiford Committed by Richard Sandiford

Fix DR_GROUP_GAP for strided accesses (PR 92677)

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
parent 02d89550
2019-11-29 Richard Sandiford <richard.sandiford@arm.com> 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 PR tree-optimization/92596
* tree-vect-stmts.c (vectorizable_call): Punt on hybrid mask/nonmask * tree-vect-stmts.c (vectorizable_call): Punt on hybrid mask/nonmask
operations. operations.
2019-11-29 Richard Sandiford <richard.sandiford@arm.com> 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 PR tree-optimization/92596
* gcc.dg/vect/bb-slp-pr92596.c: New test. * gcc.dg/vect/bb-slp-pr92596.c: New test.
* gcc.dg/vect/bb-slp-43.c: Likewise. * gcc.dg/vect/bb-slp-43.c: Likewise.
......
/* { 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;
}
}
...@@ -1829,7 +1829,10 @@ vect_dissolve_slp_only_groups (loop_vec_info loop_vinfo) ...@@ -1829,7 +1829,10 @@ vect_dissolve_slp_only_groups (loop_vec_info loop_vinfo)
DR_GROUP_FIRST_ELEMENT (vinfo) = vinfo; DR_GROUP_FIRST_ELEMENT (vinfo) = vinfo;
DR_GROUP_NEXT_ELEMENT (vinfo) = NULL; DR_GROUP_NEXT_ELEMENT (vinfo) = NULL;
DR_GROUP_SIZE (vinfo) = 1; 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; vinfo = next;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment