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

Reply via email to