https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #89 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- Created attachment 34159 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34159&action=edit a reduced c++ test case (-O2 -std=gnu++11) Here is related lines of lra-constraints.c: 4906 save = emit_spill_move (true, new_reg, original_reg); 4907 if (NEXT_INSN (save) != NULL_RTX) 4908 { 4909 lra_assert (! call_save_p); where (gdb) p call_save_p $2 = true (gdb) call debug_rtx(new_reg) (reg:DC 270) (gdb) call debug_rtx(original_reg) (reg:DC 220 [+8 ]) and emit_spill_move emits 3 instructions (insn 106 0 107 (clobber (reg:DC 270)) -1 (nil)) (insn 107 106 108 (parallel [ (set (subreg:DF (reg:DC 270) 0) (subreg:DF (reg:DC 220 [+8 ]) 0)) (use (reg:SI 154 fpscr0)) (clobber (scratch:SI)) ]) -1 (nil)) (insn 108 107 0 (parallel [ (set (subreg:DF (reg:DC 270) 8) (subreg:DF (reg:DC 220 [+8 ]) 8)) (use (reg:SI 154 fpscr0)) (clobber (scratch:SI)) ]) -1 (nil)) with emit_move_complex function in expr.c.