This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Optimization
- To: Jim Wilson <wilson at cygnus dot com>
- Subject: Re: Optimization
- From: Oskar Enoksson <osken393 at student dot liu dot se>
- Date: Wed, 1 Apr 1998 16:30:17 -0800 (PST)
- cc: egcs at cygnus dot com
On Tue, 31 Mar 1998, Jim Wilson wrote:
> for (i=0; i<100; i++)
> for (j=0; j<100; j++)
> for (k=0; k<100; k++)
> *(x+i*step[2]+j*step[1]+k*step[0]) *=
> *(x+i*step[2]+j*step[1]+k*step[0]);
>
> This is a hard problem. We can't move the loads from step[] outside
> the loop unless we can know for sure that the stores into *(x+...) won't
> modify any of the values pointed to by step. Since we have no info about
> where x or step point to, we make the worst case assumption that they
> overlap, and hence the loads from step[] are not loop invariant.
Of cource I have no idea how complicated this would be ...
but it sure would be nice to have something like the following flags:
-fno-alias
Compiler assumes that no aliases exist.
-fno-typed-alias
Compiler assumes that different types cannot be aliased.
-fno-float-alias
Compiler assumes that float/double types don't alias with other
types.
-fno-pointer-alias
Compiler assumes that pointer types cannot be aliased with
non-pointer types.
Am I dreaming? ;-)
I think SGI has something like the first two compiler options.
The KAI C++ compiler has --abstract-float and --abstract-pointer flags
similair to the third and fourth option above.
> It is actually a bit more complicated than that (we have type info to help
> with aliasing), but it is still a complicated problem.
>
> The ISO C9X restrict keyword would make this optimization easier, because
> this would allow the programmer to tell the compiler that there is no aliasing.
Yes, that would be nice to, and perhaps easier to implement?
Regards.
/Oskar