https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105090

Torbjorn SVENSSON <azoff at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |azoff at gcc dot gnu.org

--- Comment #8 from Torbjorn SVENSSON <azoff at gcc dot gnu.org> ---
r13-1006-g2005b9b888eeac078f2524b1521885f4b5453894 causes a small regression
for gcc.target/arm/copysign_softfloat_1.c.

With the arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi, I see that the
"scan-assembler-times lsr 1" test is now failing on Cortex-A7 with
-mfloat-abi=soft.

Without the changeset above, this is the assembly:

   0x00002a94 <+0>:     stmdb   sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
   0x00002a98 <+4>:     sub     sp, #12
   0x00002a9a <+6>:     ldr     r4, [pc, #104]  @ (0x2b04 <main+112>)
   0x00002a9c <+8>:     add.w   r5, r4, #64     @ 0x40
   0x00002aa0 <+12>:    add.w   r8, r4, #128    @ 0x80
   0x00002aa4 <+16>:    mov     r9, r5
   0x00002aa6 <+18>:    ldr.w   r3, [r4, #4]!
   0x00002aaa <+22>:    ldr.w   r0, [r5, #4]!
   0x00002aae <+26>:    ldr.w   r1, [r8, #4]!
   0x00002ab2 <+30>:    bfi     r0, r3, #0, #31
   0x00002ab6 <+34>:    bl      0x28fc <__aeabi_fcmpeq>
   0x00002aba <+38>:    cbz     r0, 0x2afe <main+106>
   0x00002abc <+40>:    cmp     r4, r9
   0x00002abe <+42>:    bne.n   0x2aa6 <main+18>
   0x00002ac0 <+44>:    ldr     r4, [pc, #68]   @ (0x2b08 <main+116>)
   0x00002ac2 <+46>:    add.w   r5, r4, #128    @ 0x80
   0x00002ac6 <+50>:    add.w   r8, r4, #256    @ 0x100
   0x00002aca <+54>:    mov     r9, r5
   0x00002acc <+56>:    ldrd    r2, r3, [r4, #8]!
   0x00002ad0 <+60>:    ldrd    r10, r11, [r5, #8]!
   0x00002ad4 <+64>:    mov     r0, r2
   0x00002ad6 <+66>:    mov     r1, r3
   0x00002ad8 <+68>:    strd    r0, r1, [sp]
   0x00002adc <+72>:    ldr     r6, [sp, #0]
   0x00002ade <+74>:    mov.w   r12, r11, lsr #31
   0x00002ae2 <+78>:    ldrd    r2, r3, [r8, #8]!
   0x00002ae6 <+82>:    bfi     r1, r12, #31, #1
   0x00002aea <+86>:    mov     r0, r6
   0x00002aec <+88>:    bl      0x2794 <__aeabi_dcmpeq>
   0x00002af0 <+92>:    cbz     r0, 0x2afe <main+106>
   0x00002af2 <+94>:    cmp     r4, r9
   0x00002af4 <+96>:    bne.n   0x2acc <main+56>
   0x00002af6 <+98>:    movs    r0, #0
   0x00002af8 <+100>:   add     sp, #12
   0x00002afa <+102>:   ldmia.w sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
   0x00002afe <+106>:   bl      0x1794 <__wrap_abort>
   0x00002b02 <+110>:   nop
   0x00002b04 <+112>:   andmi   r0, r0, r4
   0x00002b08 <+116>:   andmi   r0, r0, r0, asr #1


With the above changeset, this is the assembly:

   0x00002a94 <+0>:     stmdb   sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
   0x00002a98 <+4>:     sub     sp, #12
   0x00002a9a <+6>:     ldr     r4, [pc, #104]  @ (0x2b04 <main+112>)
   0x00002a9c <+8>:     add.w   r5, r4, #64     @ 0x40
   0x00002aa0 <+12>:    add.w   r8, r4, #128    @ 0x80
   0x00002aa4 <+16>:    mov     r9, r5
   0x00002aa6 <+18>:    ldr.w   r3, [r4, #4]!
   0x00002aaa <+22>:    ldr.w   r0, [r5, #4]!
   0x00002aae <+26>:    ldr.w   r1, [r8, #4]!
   0x00002ab2 <+30>:    bfi     r0, r3, #0, #31
   0x00002ab6 <+34>:    bl      0x28fc <__aeabi_fcmpeq>
   0x00002aba <+38>:    cbz     r0, 0x2b00 <main+108>
   0x00002abc <+40>:    cmp     r4, r9
   0x00002abe <+42>:    bne.n   0x2aa6 <main+18>
   0x00002ac0 <+44>:    ldr     r4, [pc, #68]   @ (0x2b08 <main+116>)
   0x00002ac2 <+46>:    add.w   r5, r4, #128    @ 0x80
   0x00002ac6 <+50>:    add.w   r8, r4, #256    @ 0x100
   0x00002aca <+54>:    mov     r9, r5
   0x00002acc <+56>:    ldrd    r2, r3, [r4, #8]!
   0x00002ad0 <+60>:    ldrd    r10, r11, [r5, #8]!
   0x00002ad4 <+64>:    mov     r1, r3
   0x00002ad6 <+66>:    mov     r0, r2
   0x00002ad8 <+68>:    strd    r0, r1, [sp]
   0x00002adc <+72>:    ldr     r6, [sp, #0]
   0x00002ade <+74>:    mov     r0, r11
   0x00002ae0 <+76>:    bfi     r0, r1, #0, #31
   0x00002ae4 <+80>:    mov     r7, r0
   0x00002ae6 <+82>:    mov     r0, r6
   0x00002ae8 <+84>:    ldrd    r2, r3, [r8, #8]!
   0x00002aec <+88>:    mov     r1, r7
   0x00002aee <+90>:    bl      0x2794 <__aeabi_dcmpeq>
   0x00002af2 <+94>:    cbz     r0, 0x2b00 <main+108>
   0x00002af4 <+96>:    cmp     r4, r9
   0x00002af6 <+98>:    bne.n   0x2acc <main+56>
   0x00002af8 <+100>:   movs    r0, #0
   0x00002afa <+102>:   add     sp, #12
   0x00002afc <+104>:   ldmia.w sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
   0x00002b00 <+108>:   bl      0x1794 <__wrap_abort>
   0x00002b04 <+112>:   andmi   r0, r0, r4
   0x00002b08 <+116>:   andmi   r0, r0, r0, asr #1


As can be seen, the lsr is indeed removed (the testcase needs to be aligned
with this change), but the updated main function is instead 2 bytes bigger. Is
this intended?

Reply via email to