https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85539
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=92180 Known to fail| |10.3.0 Status|NEW |RESOLVED Known to work| |11.1.0 --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Trying 6 -> 7: 6: r86:DI=[r87:DI] REG_DEAD r87:DI 7: r85:SI=r86:DI#0 REG_DEAD r86:DI Successfully matched this instruction: (set (reg:SI 85 [ *p_3(D) ]) (mem:SI (reg:DI 87) [1 *p_3(D)+0 S4 A64])) allowing combination of insns 6 and 7 original costs 4 + 4 = 8 replacement cost 4 deferring deletion of insn with uid = 6. modifying insn i3 7: r85:SI=[r87:DI] REG_DEAD r87:DI deferring rescan insn with uid = 7. starting the processing of deferred insns rescanning insn with uid = 7. ending the processing of deferred insns This is because cse no longer props the subreg into the last move: (insn 7 6 8 2 (set (reg:SI 85) (subreg:SI (reg:DI 86) 0)) "/app/example.cpp":7:13 67 {*movsi_internal} (nil)) (insn 8 7 12 2 (set (reg:SI 83 [ <retval> ]) (reg:SI 85)) "/app/example.cpp":7:13 67 {*movsi_internal} (nil)) (insn 12 8 13 2 (set (reg/i:SI 0 ax) (reg:SI 83 [ <retval> ])) "/app/example.cpp":8:1 67 {*movsi_internal} (nil)) And this was due to the patch which fixes PR 92180 and it was an expected out come too.