https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115949
--- Comment #4 from Oleg Endo <olegendo at gcc dot gnu.org> --- The issue seems to be that the 'movsi_ie' pattern allows 'mem(reg+disp) <-> fp-reg' load/stores through the predicates 'general_movdst_operand' and 'general_movsrc_operand' but then disallows it via the constraints. I guess once the whole thing arrives at this impossible operand combination, it has cornered itself -- it would require another register to compute the 'stack (r15) + offset' address, which it doesn't have. Perhaps it would be better to split out the FP-regs related things from the movsi_ie pattern. Another questionable point is why RA decides to use an FP reg for an SImode variable. The resulting code will be probably just terrible.