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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

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

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The ICE started with r10-2840-g70cdb21e579191fe9f0f1d45e328908e59c0179e
but we generated silently wrong-code before that, I believe since
r7-5812-ga271e415611a80f1e86e625fd61360e193d04474
        ldr     r3, .L3
        ldr     r3, [r3]
        ldm     r3, {r0, r1}
        b       bar
is what we generate with that r244249 and up, which likely doesn't handle if a
is not 8 (or just 4) byte aligned.
Before that we emitted
        push    {r4, r5, lr}
        ldr     r3, .L4
        ldr     r3, [r3]
        ldrb    r0, [r3]        @ zero_extendqisi2
        ldrb    r1, [r3, #5]    @ zero_extendqisi2
        ldrb    ip, [r3, #1]    @ zero_extendqisi2
        ldrb    r2, [r3, #4]    @ zero_extendqisi2
        ldrb    r5, [r3, #2]    @ zero_extendqisi2
        ldrb    r4, [r3, #6]    @ zero_extendqisi2
        orr     r2, r2, r1, lsl #8
        ldrb    lr, [r3, #3]    @ zero_extendqisi2
        orr     ip, r0, ip, lsl #8
        ldrb    r1, [r3, #7]    @ zero_extendqisi2
        orr     r0, ip, r5, lsl #16
        orr     r2, r2, r4, lsl #16
        orr     r0, r0, lr, lsl #24
        orr     r1, r2, r1, lsl #24
        pop     {r4, r5, lr}
        b       bar
which clearly can handle unaligned load.

Reply via email to