On Tue, Jul 5, 2011 at 2:35 AM, Richard Guenther <rguent...@suse.de> wrote:
> On Tue, 5 Jul 2011, Ira Rosen wrote:
>
>> Richard Guenther <rguent...@suse.de> wrote on 04/07/2011 03:30:59 PM:
>> > >
>> > > Richard Guenther <rguent...@suse.de> wrote on 04/07/2011 02:38:50 PM:
>> > >
>> > > > Handling of negative steps broke one of the many asserts in
>> > > > the vectorizer.  The following patch drops one that I can't
>> > > > make sense of.  I think all asserts need comments - especially
>> > > > this one would, as I can't see why using vf is correct to
>> > > > test against and not nelements (and why <= vf and not < vf).
>> > >
>> > > There is an explanation 10 rows above the assert. It doesn't make sense
>> to
>> > > peel more than vf iterations (and not nelements, since for the case of
>> > > multiple types it may help to align more data-refs - see the comment in
>> the
>> > > code). IIRC <= is for the case of aligned access, but I am not sure
>> about
>> > > that, so maybe you are right.
>> > >
>> > > I don't see how it is related to negative steps.
>> > >
>> > > I think that the real reason for this failure is that the loads are
>> > > actually irrelevant (hence, vf=4 that doesn't take char loads into
>> > > account), but we don't check that when we analyze data-refs. So, in my
>> > > opinion, the proper fix will add such check.
>> >
>> > The following also works for me:
>> >
>> > Index: tree-vect-data-refs.c
>> > ===================================================================
>> > --- tree-vect-data-refs.c       (revision 175802)
>> > +++ tree-vect-data-refs.c       (working copy)
>> > @@ -1495,6 +1495,9 @@ vect_enhance_data_refs_alignment (loop_v
>> >        stmt = DR_STMT (dr);
>> >        stmt_info = vinfo_for_stmt (stmt);
>> >
>> > +      if (!STMT_VINFO_RELEVANT (stmt_info))
>> > +       continue;
>> > +
>> >        /* For interleaving, only the alignment of the first access
>> >           matters.  */
>> >        if (STMT_VINFO_STRIDED_ACCESS (stmt_info)
>> >
>> > does that look better or do you propose to clean the datarefs
>> > vector from those references?
>>
>> Well, this is certainly enough to fix the PR.
>> I am not sure if we can just remove these data-refs from the dependence
>> checks. After that all the alignment and access checks are at least
>> redundant.
>
> Ok.  The following is what I have tested for this PR and also for
> PR49628.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, ok for trunk?
>
> Thanks,
> Richard.
>
> 2011-07-04  Richard Guenther  <rguent...@suse.de>
>
>        PR tree-optimization/49518
>        PR tree-optimization/49628
>        * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Skip
>        irrelevant and invariant data-references.
>        (vect_analyze_data_ref_access): For invariant loads clear the
>        group association.
>
>        * g++.dg/torture/pr49628.C: New testcase.
>        * gcc.dg/torture/pr49518.c: Likewise.
>

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50017

-- 
H.J.

Reply via email to