https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91469
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- Elsewhere we have sth with similar effect, but only disqualifying toplevel MEM. if (!MEM_P (src)) { replace_with_subreg_in_insn (insn, reg, reg); bitmap_clear_bit (conv, INSN_UID (insn)); } and if (!MEM_P (dst) || !REG_P (src)) replace_with_subreg_in_insn (insn, reg, reg); in the end it might be an ordering issue of splitting out memory operands and converting regs (convert_registers vs. convert_insn).