https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68729
Jeffrey A. Law <law at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at redhat dot com --- Comment #2 from Jeffrey A. Law <law at redhat dot com> --- It's been a *long* time, but my recollection was that we didn't allow QI/HI objects in the floating point registers, largely in part because we don't have a way to load up just 8 or 16 bits. In the case you're running into, I believe he high portion has to be considered "clobbered" as in we won't know its contents. So I think the clause where we generate a new SUBREG expression and call alter_subreg is safe. Essentially operand1 ought to be a MEM of some kind after that code fragment (as it would be if operand1 was a pseudo rather than a paradoxical pseudo). The scratch should be used to compute the address of the memory location and ultimately we need to get into the code which handles that case that you quoted. Since we're ultimately doing the load/store in SImode I wonder what fallout we'd see from changing "mode" when we generate the subreg & call alter_subreg on it which ought to get us into the code to handle REG+D cases when the D is too big for FP loads/stores.