gcc 2.95.3 powerpc bug
Brian Kuschak
bkuschak at yahoo.com
Fri May 2 11:09:35 EST 2003
We found an optimizer bug in 2.95.3. (unreported
until now?) Posted to gcc-GNATS, but the gcc folks
said they don't plan a fix for such an old compiler.
Does anyone on this list have a patch for this
already?
Basically, the dead-code optimization removes the
wrong code, leaving instructions which should be
optimized out and removing instructions which should
have been left in there. Happens with -O2 and -Os,
but not -O1.
Example below: inst at offset 14 should have been
removed, but instead the loop count initialization has
been incorrectly removed (r31 is not initialized
before offset 24).
Regards,
Brian
#include <stdio.h>
static void func(int a, int b)
{
0: 94 21 ff f0 stwu r1,-16(r1)
4: 7c 08 02 a6 mflr r0
8: 93 c1 00 08 stw r30,8(r1)
c: 93 e1 00 0c stw r31,12(r1)
10: 90 01 00 14 stw r0,20(r1)
int err;
unsigned int port;
switch (b) {
14: 28 04 00 04 cmplwi r4,4
case 0:
case 1:
err = 1;
break;
case 2:
case 3:
err = 2;
break;
case 4:
default:
err = 3;
}
for (port = 0; port < 5; port++)
printf("port: %d\n", port);
18: 7f e4 fb 78 mr r4,r31
1c: 38 7e 00 00 addi r3,r30,0
20: 48 00 00 01 bl 20 <func+0x20>
24: 3b ff 00 01 addi r31,r31,1
28: 28 1f 00 04 cmplwi r31,4
2c: 40 81 ff ec ble 18 <func+0x18>
}
30: 80 01 00 14 lwz r0,20(r1)
34: 7c 08 03 a6 mtlr r0
38: 83 c1 00 08 lwz r30,8(r1)
3c: 83 e1 00 0c lwz r31,12(r1)
40: 38 21 00 10 addi r1,r1,16
44: 4e 80 00 20 blr
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list