This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: auto vectorization - should this work ?
- From: Ira Rosen <IRAR at il dot ibm dot com>
- To: "Richard Guenther" <richard dot guenther at gmail dot com>
- Cc: gcc at gcc dot gnu dot org, gianni at mariani dot ws
- Date: Sun, 6 May 2007 16:33:06 +0300
- Subject: Re: auto vectorization - should this work ?
"Richard Guenther" <richard.guenther@gmail.com> wrote on 06/05/2007
16:17:05:
> On 5/6/07, Ira Rosen <IRAR@il.ibm.com> wrote:
> >
> > Yes, this should get vectorized. The problem is in data dependencies
> > analysis. We fail to prove that s_5->a[i_16] and s_5->a[i_16] access
the
> > same memory location. I think, it happens since when we compare the
bases
> > of the data references (s_5->a and s_5->a) in base_object_differ_p(),
we do
> > that by comparing the trees (which are pointers) and not their content.
> >
> > I'll look into this and, I hope, I will submit a fix for that soon (I
guess
> > using operand_equal_p instead).
>
> Duh, that function looks interesting, indeed ;)
>
> It should probably use get_base_address () to get at the base object
> and then operand_equal_p to compare them. Note that it strips outer
> variable offset as well, like for a[i].b[j] you will get 'a' as the
> base object.
> If data-ref cannot handle this well, just copy get_base_address () and
> stop at the first ARRAY_REF you come along. But maybe
> base_object_differ_p is only called from contexts that are well-defined
> in this regard.
base_object_differ_p is called after the data-refs analysis. So we really
compare base objects here, and no further peeling is needed at this stage.
At least, that was our intention.
Thanks,
Ira
>
> Richard.