https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #69 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- The patch in c#57 disables memory equiv substitution for the memory with base+index and base+display addressing. static bool sh_cannot_substitute_equiv_p (rtx subst) { if (TARGET_SHMEDIA) return false; if (GET_CODE (subst) == SUBREG) subst = SUBREG_REG (subst); if (MEM_P (subst) && GET_CODE (XEXP (subst, 0)) == PLUS) return true; return false; } A bit surprisingly, disabling all memory equiv substitution wins CSiBE tests. With static bool sh_cannot_substitute_equiv_p (rtx subst) { if (TARGET_SHMEDIA) return false; return true; } the code size regression for CSiBE from non LRA is reduced to 0.59%. Looking at the improved cases, the extra save/restore insns to/from stack disappear. I guess that SH has not enough numbers of the hard registers to make the equiv substitution win in the size and the speed on average working sets. It looks the pseudos produced to hold the equiv values can't get hard registers for bad cases and end up memory save/restore insns which make the code worse.