https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78166
--- Comment #3 from Jeffrey A. Law <law at redhat dot com> --- Hmm, clearly it helps to read the old thread. Canonicalization rules are that outside a MEM we use ASHIFT and within a MEM we use MULT. So recognizing the MULT seems reasonable. So presumably what's happening is we want to reload the address expression. That means emitting something like (set (temp) (address expression)) Which means we want to emit using the ASHIFT rather than the MULT form. Ugh. I'm not sure teaching reload about that is wise. Let me think a bit. And, no LEGITIMIZE_RELOAD_ADDRESS is not the answer ;-)