On Fri, Nov 29, 2019 at 11:53 AM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> When dissolving an SLP-only group of accesses, we should only set
> the gap to group_size - 1 for normal non-strided groups.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

OK.  Probably also broken on branch(es).

Richard.

> Richard
>
>
> 2019-11-29  Richard Sandiford  <richard.sandif...@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.
>
> Index: gcc/tree-vect-loop.c
> ===================================================================
> --- gcc/tree-vect-loop.c        2019-11-29 09:13:43.764143091 +0000
> +++ gcc/tree-vect-loop.c        2019-11-29 10:52:30.475476141 +0000
> @@ -1829,7 +1829,10 @@ vect_dissolve_slp_only_groups (loop_vec_
>                   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;
>                 }
>             }
> Index: gcc/testsuite/gcc.dg/vect/pr92677.c
> ===================================================================
> --- /dev/null   2019-09-17 11:41:18.176664108 +0100
> +++ gcc/testsuite/gcc.dg/vect/pr92677.c 2019-11-29 10:52:30.475476141 +0000
> @@ -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;
> +  }
> +}

Reply via email to