optimizations
Håkan Hjort
hakan@safelogic.se
Tue Feb 18 18:13:00 GMT 2003
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
More information about the Gcc
mailing list