https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #188 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- (In reply to Kazumoto Kojima from comment #187) Looking at the RTL dumps in -mlra case, there is an instruction to set r4 in the postreload dump: (insn 579 573 580 49 (set (reg:SI 4 r4) (reg/f:SI 11 r11 [1021])) "/git/gcc/gcc/wide-int.h":822:94 191 {movsi_ie} (expr_list:REG_EQUAL (plus:SI (reg/f:SI 153 sfp) (const_int -88 [0xffffffffffffffa8])) (nil))) (insn 580 579 581 49 (set (reg:SI 5 r5) (reg/f:SI 10 r10 [1023])) "/git/gcc/gcc/wide-int.h":822:94 191 {movsi_ie} (expr_list:REG_EQUAL (plus:SI (reg/f:SI 153 sfp) (const_int -60 [0xffffffffffffffc4])) (nil))) (insn 581 580 2186 49 (set (reg:SI 6 r6) (const_int 1 [0x1])) "/git/gcc/gcc/wide-int.h":822:94 191 {movsi_ie} (nil)) (note 2186 581 582 49 NOTE_INSN_DELETED) (insn 582 2186 2187 49 (parallel [ (set (mem:BLK (reg:SI 4 r4) [0 A8]) (mem:BLK (reg:SI 5 r5) [0 A8])) (use (reg:SI 14 r14 [1193])) (use (const_int 0 [0])) (use (reg:SI 6 r6)) (clobber (reg:SI 146 pr)) (clobber (reg:SI 147 t)) (clobber (reg:SI 4 r4)) (clobber (reg:SI 5 r5)) (clobber (reg:SI 6 r6)) (clobber (reg:SI 0 r0)) (clobber (reg:SI 1 r1)) (clobber (reg:SI 2 r2)) (clobber (reg:SI 3 r3)) ]) "/git/gcc/gcc/wide-int.h":822:94 326 {block_lump_real_i4} (nil)) but the insn 579 is dissapeared in late_combine2 dump: (insn 573 1839 580 49 (set (mem/c:SI (plus:SI (reg/f:SI 10 r10 [1023]) (const_int 16 [0x10])) [6 MEM[(struct fixed_wide_int_storage *)_301].len+0 S4 A32]) (reg:SI 7 r7 [1042])) "/git/gcc/gcc/wide-int.h":1435:7 191 {movsi_ie} (nil)) (insn 580 573 581 49 (set (reg:SI 5 r5) (reg/f:SI 10 r10 [1023])) "/git/gcc/gcc/wide-int.h":822:94 191 {movsi_ie} (expr_list:REG_EQUAL (plus:SI (reg/f:SI 153 sfp) (const_int -60 [0xffffffffffffffc4])) (nil))) I confirmed that -fno-late-combine-instructions fixes this issue. I'm not sure what is going on, though. As pointed out in c#184, -fno-late-combine-instructions doesn't help __muldi3 case.