gcc loop unrolling problem ??
Konark Goel, Noida
konarkg@noida.hcltech.com
Thu Feb 12 10:30:00 GMT 2004
I compiled a gcc testcase with only -O3 option and also with -O3 and
-funroll-all-loops options combined.... For the first case (-O3 option) it
is generating quite a correct assembly...but in case of -funroll-all-loops
it is generating quite a no. of calls, which actually is not needed. I guess
there's some problem in it. Also the no. of calls being generated is
dependent upon the minimum and maximum values in the switch cases !!
the testcase is this :
/* TestCase starts here */
extern int getch();
extern int class();
int
token()
{
int state = 1;
while (1) {
int c=0;
c = getch();
switch (state) {
case 1: break;
case 4: break;
case 5: break;
case 6:
{
switch (class(c)) {
default: break;
}
} break;
case 7: break;
}
}
}
/* TestCase ends.....*/
;Assembly for -O3 -funroll-all-loops case ....
.file "990801-1.c"
.text
.p2align 2,,3
.globl token
.type token,@function
token:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
.p2align 2,,3
.L16:
call getch
call getch
call getch
call getch
call getch
call getch
call getch
call getch
jmp .L16
.Lfe1:
.size token,.Lfe1-token
.ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
;assembly for only -O3 condition...
.file "990801-1.c"
.text
.p2align 2,,3
.globl token
.type token,@function
token:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
.p2align 2,,3
.L16:
call getch
jmp .L16
.Lfe1:
.size token,.Lfe1-token
.ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
;assembly ends..
as is clear it creates a strange assembly with -O3 -funroll-all-loops
option......Is this a BUG ??
hoping to get a quick response..
thanks,
Kon ??
"The answer is out there....,
Its the question that drives us...."
More information about the Gcc
mailing list