https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101523
--- Comment #26 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So looking into the s390 backend, I notice that s390_address_cost says the
addressing mode `base+index` is slightly more expensive than just `base`:
from s390_address_cost :
return ad.indx? COSTS_N_INSNS (1) + 1 : COSTS_N_INSNS (1);
BUT then s390_rtx_costs when looking at MEM does not take into account the
addressing for the cost there (it does take into account on the LHS though):
```
case MEM:
*total = 0;
return true;
```
This mismatch does cause some issues. Basically fwprop uses address_cost to
figure out when it is replacing into MEM but combine just uses
insn_cost/rtx_cost . So while fwprop rejects it as being worse and then
combine comes along and does it.
I suspect if we change the s390 backend just slightly to set the cost when
there is an index to the address to 1 for the MEM, combine won't be acting up
here.
Basically putting in sync the 2 cost methods.