This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: optimizations
- From: Håkan Hjort <hakan at safelogic dot se>
- To: Reza Roboubi <reza at linisoft dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 18 Feb 2003 18:55:24 +0100
- Subject: Re: optimizations
- References: <Pine.LNX.4.21.0301151338040.30377-100000@mail.kloo.net> <3E25F2BB.BA90B2C9@linisoft.com>
Wed Jan 15 2003, Reza Roboubi wrote:
> tm_gccmail@mail.kloo.net wrote:
> [snap]
> > I mentioned this on the gcc-bugs mailing list, and Mark Mitchell
> > contributed a fairly simple load hoisting improvement to the loop
> > optmiizer which restored performance on Whetstone.
> >
> > If you look at the gcc-bugs archives for 1998, you may be able to find
> > this message thread.
> [snap]
>
> Thanks for this input. It would be interesting to see how the issue was fixed.
Sorry for getting into this so late.
Nobody actually posted the code generated by 3.3/3.4...
inline int mm(int *i) {
if((*i)==0x10) return 0;
(*i)++; return 1;
}
int main() {
int k=0;
while (mm(&k)) {}
write(1,&k,1);
return 0;
}
For Sun's Forte compiler one gets the following:
main:
save %sp,-104,%sp
or %g0,16,%g1
st %g1,[%fp-4]
add %fp,-4,%o1
or %g0,1,%o0
call write ! params = %o0 %o1 %o2 ! Result
or %g0,1,%o2
ret ! Result = %i0
restore %g0,0,%o0
I.e. it just stores '16' in k before the call to write, no trace left
of mm() or any loop, as should be.
Perhaps GCC now does the same after hoisting both the load and the store?
--
/Håkan