On 9/3/07, Daniel Berlin <[EMAIL PROTECTED]> wrote:
> On 9/2/07, Paul Brook <[EMAIL PROTECTED]> wrote:
> > > > That said, second, my understanding of restrict, from reading the c99
> > > > standard, is that it is perfectly valid for restrict pointers to alias
> > > > each other during *loads*..  IE you can guarantee any restricted
> > > > pointer that is stored into can't alias the other restricted pointers.
> > > >  Those only used for loads can alias each other.
> > >
> > > How does it make a difference?  If for two pointers that are only
> > > loaded from we say they don't alias I cannot imagine a transformation
> > > that would get anything wrong.
>
> Easy answer: Dependence testing and then loop transforms.
>
> Given p[i] = a[i] + b[i], if you claim a and b can't alias, you will
> now claim that a[i] and b[i] don't access the same memory on the same
> iteration.
>
> We could easily use this and some profit estimation to decide to say,
> change the iteration space of a but not b,which will break since they
> really do alias, and breaking this is bad because they are allowed to.

Eh?  Maybe I'm blind, but how can a change in iteration space that is
valid for the non-aliasing case be invalid for the aliasing case _if we
do not modify any data_?

Ok, Marks example is the only one we could get wrong.  But we simply
can not derive value ranges from restrict qualification.

Richard.

Reply via email to