Hi,

> -----Original Message-----
> From: Richard Sandiford [mailto:richard.sandif...@arm.com]
> Sent: Friday, June 12, 2020 2:29 AM
> To: Yangfei (Felix) <felix.y...@huawei.com>
> Cc: gcc-patches@gcc.gnu.org
> Subject: Re: [PATCH PR95570] vect: ICE: Segmentation fault in
> vect_loop_versioning
> 
> "Yangfei (Felix)" <felix.y...@huawei.com> writes:
> > From 30a0196b0afd45bae9291cfab3fee4ad6b90cbcb Mon Sep 17 00:00:00
> 2001
> > From: Fei Yang <felix.y...@huawei.com>
> > Date: Thu, 11 Jun 2020 19:33:22 +0800
> > Subject: [PATCH] vect: Fix an ICE in vect_loop_versioning [PR95570]
> >
> > In the test case for PR95570, the only data reference in the loop is a
> > gather-statter access.  Scalar evolution analysis for this data
> > reference failed, so DR_STEP is NULL_TREE.  This leads to the segmentation
> fault.
> > We should filter out scatter-gather access in
> vect_enhance_data_refs_alignment.
> 
> Looks good, just a couple of very minor details…
> 
> > 2020-06-11  Felix Yang  <felix.y...@huawei.com>
> >
> > gcc/
> >         PR tree-optimization/95570
> >         * tree-vect-data-refs.c (vect_relevant_for_alignment_p): New
> function.
> >         (vect_verify_datarefs_alignment): Call it to filter out data 
> > references
> >         in the loop whose alignment is irrelevant.
> >         (vect_get_peeling_costs_all_drs): Likewise.
> >         (vect_peeling_supportable): Likewise.
> >         (vect_enhance_data_refs_alignment): Likewise.
> >
> > gcc/testsuite/
> >
> >         PR tree-optimization/95570
> >         * gcc.dg/vect/pr95570.c: New test.
> > ---
> >  gcc/testsuite/gcc.dg/vect/pr95570.c | 11 ++++
> >  gcc/tree-vect-data-refs.c           | 83 ++++++++++++-----------------
> >  2 files changed, 45 insertions(+), 49 deletions(-)  create mode
> > 100644 gcc/testsuite/gcc.dg/vect/pr95570.c
> >
> > diff --git a/gcc/testsuite/gcc.dg/vect/pr95570.c
> > b/gcc/testsuite/gcc.dg/vect/pr95570.c
> > new file mode 100644
> > index 00000000000..b9362614004
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/vect/pr95570.c
> > @@ -0,0 +1,11 @@
> > +/* { dg-do compile } */
> > +/* { dg-additional-options "-march=armv8.2-a+sve
> > +-msve-vector-bits=256 -mstrict-align -fwrapv" { target aarch64*-*-* }
> > +} */
> > +
> > +int x[8][32];
> > +
> > +void
> > +foo (int start)
> > +{
> > +  for (int i = start; i < start + 16; i++)
> > +    x[start][i] = i;
> > +}
> > diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
> > index 39d5a1b554c..98f6fb76ff9 100644
> > --- a/gcc/tree-vect-data-refs.c
> > +++ b/gcc/tree-vect-data-refs.c
> > @@ -1129,6 +1129,35 @@ vect_update_misalignment_for_peel
> (dr_vec_info *dr_info,
> >    SET_DR_MISALIGNMENT (dr_info, DR_MISALIGNMENT_UNKNOWN);  }
> >
> > +/* Return TRUE if alignment is relevant for DR_INFO.  */
> 
> Just “Return true …“ for new code.  TRUE is a hold-over from C days.

OK.

> > +static bool
> > +vect_relevant_for_alignment_p (dr_vec_info *dr_info) {
> > +  stmt_vec_info stmt_info = dr_info->stmt;
> > +
> > +  if (!STMT_VINFO_RELEVANT_P (stmt_info))
> > +    return false;
> > +
> > +  /* For interleaving, only the alignment of the first access
> > + matters.  */  if (STMT_VINFO_GROUPED_ACCESS (stmt_info)
> > +      && DR_GROUP_FIRST_ELEMENT (stmt_info) != stmt_info)
> > +    return false;
> > +
> > +  /* For scatter-gather or invariant accesses, alignment is irrelevant
> > +     for them.  */
> 
> Maybe:
> 
>   /* Scatter-gather and invariant accesses continue to address individual
>      scalars, so vector-level alignment is irrelevant.  */
 
Much better : - )   Updated accordingly.
Also bootstrapped and tested on x86_64-linux-gnu.

Thanks,
Felix

gcc/

+2020-06-12  Felix Yang  <felix.y...@huawei.com>
+
+       PR tree-optimization/95570
+       * tree-vect-data-refs.c (vect_relevant_for_alignment_p): New function.
+       (vect_verify_datarefs_alignment): Call it to filter out data references
+       in the loop whose alignment is irrelevant.
+       (vect_get_peeling_costs_all_drs): Likewise.
+       (vect_peeling_supportable): Likewise.
+       (vect_enhance_data_refs_alignment): Likewise.

gcc/testsuite/

+2020-06-12  Felix Yang  <felix.y...@huawei.com>
+
+       PR tree-optimization/95570
+       * gcc.dg/vect/pr95570.c: New test.

Attachment: pr95570-v3.diff
Description: pr95570-v3.diff

Reply via email to