https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67657
--- Comment #6 from Oleg Endo <olegendo at gcc dot gnu.org> --- The peephole outputs this: (insn 2292 0 0 (set (reg/v/f:SI 2 r2 [orig:320 outptr ] [320]) (mem/f:SI (post_inc:SI (reg:SI 2 r2)) [2 MEM[base: _145, offset: 0B]+0 S4 A32])) -1 (expr_list:REG_INC (reg:SI 2 r2) (nil))) i.e. mov.l @r2+,r2 and then things seem to go wrong. Disabling the peephole shows the following code in the output: .L119: add #64,r0 mov.l @(0,r0),r2 add #4,r2 mov.l r2,@(0,r0) add #-4,r2 <<< mov.l @r2+,r0 <<< mov r0,r2 <<< mov.w .L81,r0 add r15,r0 mov.l @(16,r0),r0 add r0,r2 The peephole should convert it to add #-4,r2 mov.l @r2,r2 I'll come up with something.