------- Comment #4 from alexvod at google dot com 2009-04-23 16:39 -------
A more simple example of this issue:
void func(int*);
void test()
{
int a = 0;
while (1) {
func(&a);
if (a > 12) break;
}
}
GCC rev123918:
push {lr}
sub sp, sp, #12
mov r3, #0
str r3, [sp, #4]
.L2:
add r0, sp, #4
bl func
ldr r3, [sp, #4]
cmp r3, #12
ble .L2
add sp, sp, #12
@ sp needed for prologue
pop {pc}
GCC rev123919:
test:
push {r4, lr}
sub sp, sp, #8
mov r3, #0
add r4, sp, #4
str r3, [sp, #4]
.L2:
mov r0, r4
bl func
ldr r3, [sp, #4]
cmp r3, #12
ble .L2
add sp, sp, #8
@ sp needed for prologue
pop {r4, pc}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39837