On Mon, Oct 12, 2020 at 1:26 PM Richard Biener
<richard.guent...@gmail.com> wrote:
>
> On Mon, Oct 12, 2020 at 12:59 PM Martin Liška <mli...@suse.cz> wrote:
> >
> > The patch fixes the following 2 issues:
> >
> >    .MASK_STORE_LANES (&a, 4B, max_mask_34, vect_array.12);
> >
> > here we miss to return the last argument as stored value.
> >
> > ivtmp_32 = ivtmp_31 + POLY_INT_CST [4, 4];
> >
> > here we miss a bail out in vect_recog_over_widening_pattern.
> >
> > gcc/ChangeLog:
> >
> >         PR tree-optimization/97079
> >         * internal-fn.c (internal_fn_stored_value_index): Handle also
> >         .MASK_STORE_LANES.
> >         * tree-vect-patterns.c (vect_recog_over_widening_pattern): Bail
> >         out for POLY_INT_CST.
> >
> > gcc/testsuite/ChangeLog:
> >
> >         PR tree-optimization/97079
> >         * gcc.target/aarch64/sve/pr97079.c: New test.
> >
> > I'm running tests on x86_64-linux-gnu and I would appreciate running that
> > on a SVE aarch64 machine.
> >
> > Ready for master?
> > Thanks,
> > Martin
> >
> > ---
> >   gcc/internal-fn.c                             |  1 +
> >   .../gcc.target/aarch64/sve/pr97079.c          | 22 +++++++++++++++++++
> >   gcc/tree-vect-patterns.c                      |  2 ++
> >   3 files changed, 25 insertions(+)
> >   create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pr97079.c
> >
> > diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
> > index 92cb3cd845a..792d2ca568a 100644
> > --- a/gcc/internal-fn.c
> > +++ b/gcc/internal-fn.c
> > @@ -3795,6 +3795,7 @@ internal_fn_stored_value_index (internal_fn fn)
> >     switch (fn)
> >       {
> >       case IFN_MASK_STORE:
> > +    case IFN_MASK_STORE_LANES:
> >       case IFN_SCATTER_STORE:
> >       case IFN_MASK_SCATTER_STORE:
> >       case IFN_LEN_STORE:
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr97079.c 
> > b/gcc/testsuite/gcc.target/aarch64/sve/pr97079.c
> > new file mode 100644
> > index 00000000000..06e6a7cde94
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr97079.c
> > @@ -0,0 +1,22 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-O3 -march=armv8.2-a+sve" } */
> > +
> > +void g(void);
> > +
> > +int a[8][3];
> > +int b;
> > +void c(void)
> > +{
> > +  int d[] = {7, 3};
> > +  int *e = a[0];
> > +  int f;
> > +  b = 0;
> > +  for (; b < 8; b++)
> > +    {
> > +      f = 0;
> > +      for (; f < 3; f++)
> > +       a[b][f] = 0;
> > +    }
> > +  g();
> > +  *e = (long)d;
> > +}
> > diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
> > index 71e4e106202..6302bc42f46 100644
> > --- a/gcc/tree-vect-patterns.c
> > +++ b/gcc/tree-vect-patterns.c
> > @@ -1571,6 +1571,8 @@ vect_recog_over_widening_pattern (vec_info *vinfo,
> >         tree op = gimple_op (last_stmt, first_op + i);
> >         if (TREE_CODE (op) == INTEGER_CST)
> >         unprom[i].set_op (op, vect_constant_def);
> > +      else if (TREE_CODE (op) == POLY_INT_CST)
> > +       return NULL;
>
> can you make this a simpler
>
>           else
>              return NULL;
>
> at the end of the if please?

Btw, POLY_INT_CST can likely be handled the same as INTEGER_CST - I suppose
you tried that? (it might need further adjustments downstream).

Richard.

>
> Thanks,
> Richard.
>
> >         else if (TREE_CODE (op) == SSA_NAME)
> >         {
> >           bool op_single_use_p = true;
> > --
> > 2.28.0
> >

Reply via email to