https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112415
--- Comment #41 from Jeffrey A. Law <law at gcc dot gnu.org> --- I would agree. In fact,the whole point of the f-m-o pass is to bring those immediates into the memory reference. It'd be really useful to know why that isn't happening. The only thing I can think of would be if multiple instructions needed the %r20 in the RTL you attached. Which might point to a refinement we should make in f-m-o, specifically the transformation isn't likely profitable if we aren't able to fold away a term or fold a constant term into the actual memory reference.