https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71436
--- Comment #1 from ktkachov at gcc dot gnu.org --- The invalid mem-mem set rtx appears during reload. It transforms: (insn 55 67 151 3 (parallel [ (set (reg:SI 0 r0) (mem/u/c:SI (reg/f:SI 147) [2 c+0 S4 A32])) (set (reg:SI 158 [ c+4 ]) (mem/u/c:SI (plus:SI (reg/f:SI 147) (const_int 4 [0x4])) [2 c+4 S4 A32])) ]) arm-crash.c:25 393 {*load_multiple} (expr_list:REG_UNUSED (reg:SI 0 r0) (nil))) into: (insn 55 67 70 3 (parallel [ (set (reg:SI 0 r0) (mem/u/c:SI (reg/f:SI 5 r5 [147]) [2 c+0 S4 A32])) (set (mem/c:SI (plus:SI (reg/f:SI 102 sfp) (const_int -4 [0xfffffffffffffffc])) [4 %sfp+-12 S4 A32]) (mem/u/c:SI (plus:SI (reg/f:SI 5 r5 [147]) (const_int 4 [0x4])) [2 c+4 S4 A32])) ]) arm-crash.c:25 393 {*load_multiple} (nil)) I wonder why this gets recognised? ldm_stm_operation_p that's supposed to act as a predicate for that insn doesn't accept it (from what I can see in gdb)