Hi,

> -----Original Message-----
> From: Richard Sandiford [mailto:richard.sandif...@arm.com]
> Sent: Thursday, June 11, 2020 12:23 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:
> > Hi,
> >
> > PR: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95570
> >
> > Here, we are doing loop versioning for alignment. The only dr here is a
> gather-statter operation: x[start][i].
> > Scalar evolution analysis for this dr failed, so DR_STEP is NULL_TREE, which
> leads to the segfault.
> > But scatter-gather operation should be filtered out in
> vect_enhance_data_refs_alignment.
> > There are similar issues in vect_verify_datarefs_alignment,
> vect_get_peeling_costs_all_drs and vect_peeling_supportable.
> > Proposed patch adds back the necessary tests.  Bootstrapped and tested
> on aarch64-linux-gnu & x86_64-linux-gnu.
> >
> > Test coverage:
> > Existing tests [1] and newly added test ensures coverage for all the changes
> except for the changes in vect_peeling_supportable.
> > Currently I don't have a test to cover the changes in
> vect_peeling_supportable.  Should we keep them?
> 
> Rather than add several instances of the new test, I think it would make
> sense to split the (hopefully) correct conditions in
> vect_enhance_data_refs_alignment out into a subroutine and use it in the
> other sites.  Doing that for vect_peeling_supportable would then be
> justifiable as a clean-up.

OK.

> How about something like vect_relevant_for_alignment_p as the name of
> the subroutine?

Nice name.   Does the v2 patch look better?
Bootstrapped and tested on aarch64-linux-gnu.
Newly added test fail without the fix and pass otherwise.

gcc/

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

Thanks,
Felix

Attachment: pr95570-v2.diff
Description: pr95570-v2.diff

Reply via email to