https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116236
--- Comment #11 from Jeffrey A. Law <law at gcc dot gnu.org> --- In general I would think rejecting is right way to go under the general guidance of making the predicates and such match what the underlying hardware can actually do. So for example, if we we have (mem (reg X)) and we can in theory propagate d0 resulting in (mem (reg d0)). Conceptually that might be worth rejecting. But you'd have to actually evaluate how it impacts the code -- the m68k port was written at a time when the standard way to deal with these problems was punt to reload. And while a change may make conceptual sense (like tightening the address checking routines, predicates, etc), such changes may actually make the resultant code worse.