Hi Richard,

I have a patch set for bug 43513 - The stack pointer is adjusted twice.

01_pr43513.3.patch
02_pr43513.3.test.patch
03_pr43513.3.mudflap.patch

The patch set has been bootstrapped and reg-tested on x86_64.

I will sent out the patches individually.

The patch replaces a vla __builtin_alloca that has a constant argument with an
array declaration.

The effect of the patch on the example from the bug report for
-march=armv7-a -mthumb -Os -fpic is a text size reduction from 72 to 64 bytes.
This is demonstrated in the following diff, where left is without and right is
with patch.

push    {r4, r5, r6, r7, r8, lr}      | push    {r4, r5, r6, lr}
add     r7, sp, #0                    | sub     sp, sp, #40
sub     sp, sp, #48                   <
ldr     r4, .L4                         ldr     r4, .L4
mov     r0, sp                          mov     r0, sp
ldr     r6, .L4+4                     <
bl      bar(PLT)                        bl      bar(PLT)
ldr     r3, .L4+8                     | ldr     r3, .L4+4
.LPIC8:                                 .LPIC8:
add     r4, pc                          add     r4, pc
mov     r8, sp                        | ldr     r6, .L4+8
movs    r5, #0                          movs    r5, #0
                                      > ldr     r4, [r4, r3]
.LPIC9:                                 .LPIC9:
add     r6, pc                          add     r6, pc
ldr     r4, [r4, r3]                  <
.L2:                                    .L2:
ldr     r2, [r8, r5]                  | ldr     r2, [sp, r5]
mov     r1, r6                          mov     r1, r6
ldr     r0, [r4, #0]                    ldr     r0, [r4, #0]
adds    r5, r5, #4                      adds    r5, r5, #4
bl      fprintf(PLT)                    bl      fprintf(PLT)
cmp     r5, #40                         cmp     r5, #40
bne     .L2                             bne     .L2
mov     sp, r7                        | add     sp, sp, #40
pop     {r4, r5, r6, r7, r8, pc}      | pop     {r4, r5, r6, pc}
.L5:                                    .L5:
.align  2                               .align  2
.L4:                                    .L4:
.word   _GLOBAL_OFFSET_TABLE_-(.LPIC8   .word   _GLOBAL_OFFSET_TABLE_-(.LPIC8
.word   .LC0-(.LPIC9+4)               <
.word   stdout(GOT)                     .word   stdout(GOT)
                                      > .word   .LC0-(.LPIC9+4)
.size   foo3, .-foo3                    .size   foo3, .-foo3
.section        .rodata.str1.1,"aMS",   .section        .rodata.str1.1,"aMS",
.LC0:                                   .LC0:
.ascii  "%d \000"                       .ascii  "%d \000"

Thanks,
- Tom

Reply via email to