https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114208

--- Comment #5 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> Did it ever work?
No.  I allowed -mfuse-add=3 to reproduce this PR because there seems to be a
problem with DSE, and for the case that someone is going to fix it before it
bites an important target.  The mfuse-add optimization tries to avoid the
broken parts of DSE and works around it; documented are only -mfuse-add=0...2 
It was added Feb 2024 as PR114100.

>  I suppose 'st Y+,r20 is' post-inc so maybe DSE mishandles this somehow.
That post-inc is only generated after .dse2: .split2 splits some move insns:
These cores don't have reg+offset addressing, so the backend must pretend to
support it.  Then .split2 generates pointer-adjust + mem-access +
undo-pointer-adjust.  The address adjustments are plain additions of the
address register (frame pointer in this case) and have according
REG_CFA_ADJUST_CFA notes.  Then .dse2 removes some non-dead stores.  The 'st
Y+,r20' you mentioned is only generated by .avr-fuse-add which runs after
.dse2.

I'd guess that GCC is not ready for targets with such tight addressing modes?
(without reg+offset addressing; stack-pointer cannot be used either, the only
SP accesses are PUSH and POP).

ad "needs-bisection": -mfuse-add is a new target optimization added as PR114100
in Feb 2024, so bi-secting won't work because -mfuse-add is not recognized
prior to that date.

Reply via email to