------- 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