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.