https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94291
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This is on try_combine on: (gdb) p debug_rtx (i3) (insn 20 12 22 2 (set (mem/c:SI (plus:SI (reg/f:SI 102 sfp) (const_int -4 [0xfffffffffffffffc])) [1 x+0 S4 A32]) (reg:SI 125)) "pr94291.c":7:8 241 {*arm_movsi_insn} (expr_list:REG_DEAD (reg:SI 125) (nil))) (gdb) p debug_rtx (i2) (insn 12 7 20 2 (parallel [ (set (reg:CC 100 cc) (compare:CC (reg:SI 121 [ <retval> ]) (const_int 0 [0]))) (set (reg:SI 125) (reg:SI 121 [ <retval> ])) ]) "pr94291.c":7:8 248 {*movsi_compare0} (expr_list:REG_UNUSED (reg:CC 100 cc) (nil))) where it is merged into cc = r121 cmp 0; [sfp-4] = r121 and as that isn't recognized, it is being split_i2i3 into: [sfp-4] = r121 followed by cc = r121 cmp 0 where SET_DEST of newi2pat is a MEM rather than REG. So, either we should somewhere punt instead of set split_i2i3 because the dest is a MEM, not REG, or we should handle it somehow.