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
This commit is contained in:
Richard Sandiford 2019-11-29 14:48:30 +00:00 committed by Richard Sandiford
parent 02d895504c
commit 7e99af4816
4 changed files with 41 additions and 1 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -1,3 +1,8 @@
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

View File

@ -0,0 +1,26 @@
/* { 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;
}
}

View File

@ -1829,7 +1829,10 @@ vect_dissolve_slp_only_groups (loop_vec_info loop_vinfo)
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;
}
}