Related articles |
---|
[2 earlier articles] |
Re: Compiler loop optimizations robert.hundt@gmail.com (Robert H) (2007-01-01) |
Re: Compiler loop optimizations robert.hundt@gmail.com (Robert H) (2007-01-01) |
Re: Compiler loop optimizations torbenm@app-0.diku.dk (2007-01-05) |
Re: Compiler loop optimizations linuxkaffee@gmx.net (Christian Sturz) (2007-01-05) |
Re: Compiler loop optimizations emailamit@gmail.com (Amit Gupta) (2007-01-07) |
Compiler loop optimizations Heiko.Falk@udo.edu (Heiko Falk) (2007-01-10) |
Re: Compiler loop optimizations hebisch@math.uni.wroc.pl (Waldek Hebisch) (2007-01-11) |
Compiler Loop Optimizations plfriko@yahoo.de (Tim Frink) (2008-02-28) |
From: | Waldek Hebisch <hebisch@math.uni.wroc.pl> |
Newsgroups: | comp.compilers |
Date: | 11 Jan 2007 09:01:05 -0500 |
Organization: | Politechnika Wroclawska |
References: | 06-12-109 |
Keywords: | optimize, GCC |
Posted-Date: | 11 Jan 2007 09:01:05 EST |
Christian Sturz <linuxkaffee@gmx.net> wrote:
> Hi,
>
> I was curious if there are any gcc compiler optimizations that can improve
> this code:
>
> void foo10( )
> {
> for ( int i = 0; i < 10; ++i )
> {
> [...]
> if( i == 15 ) { [BLOCK1] }
> }
> }
>
gcc 4.1.1 optimizes the loop above to nothing (since the loop produces
no result). On slightly more complicated function:
int
f10(char * s)
{
int i, ss = 0;
for (i=0; i<1000; i++) {
ss += *s;
s++;
if (i == 1500) {
ss += i;
}
}
return ss;
}
gcc 4.1.1 deletes the "if (i == 15)" block. In general gcc tracks
ranges of variables and uses this information to decide results of
tests (if possible). Once result of comparison is known to be
false gcc deletes the if-block.
BTW, with loop count of 10 at '-O3' gcc completly unrolled the loop.
> void foo100( )
> {
> for ( int i = 0; i < 100; ++i )
> {
> [...]
> if( i == 15 ) { [BLOCK2] }
> }
> }
>
Here gcc keeps test in the loop (provided that you do something usefull
in the loop, so that gcc can not delete the whole loop).
--
Waldek Hebisch
hebisch@math.uni.wroc.pl
Return to the
comp.compilers page.
Search the
comp.compilers archives again.