https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84757
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|deferred |
Target Milestone|12.5 |15.0
Known to work| |15.0
--- Comment #15 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Fixed by late_combine1 in GCC 15.
It was able to forwprop the move involving the subreg:
```
trying to combine definition of r113 in:
21: r113:SI=r102:DI#4
into:
12: [r108:SI]=r113:SI
REG_DEAD r113:SI
REG_DEAD r108:SI
successfully matched this instruction to *movsi_internal:
(set (mem:SI (reg/v/f:SI 108 [ upper ]) [1 *upper_9(D)+0 S4 A32])
(subreg:SI (reg/v:DI 102 [ ab ]) 4))
original cost = 12 + 4 (weighted: 16.000000), replacement cost = 12 (weighted:
12.000000); keeping replacement
rescanning insn with uid = 12.
updating insn 12 in-place
verify found no changes in insn with uid = 12.
deleting insn 21
deleting insn with uid = 21.
starting the processing of deferred insns
ending the processing of deferred insns
```
Tested `-O2 -fdisable-rtl-late_combine1` to show that made the difference.