https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91469
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- Index: gcc/config/i386/i386-features.c =================================================================== --- gcc/config/i386/i386-features.c (revision 274536) +++ gcc/config/i386/i386-features.c (working copy) @@ -613,6 +613,10 @@ general_scalar_chain::replace_with_subre if (x == reg) return gen_rtx_SUBREG (vmode, new_reg, 0); + /* But not in memory addresses. */ + if (GET_CODE (x) == MEM) + return x; + const char *fmt = GET_RTX_FORMAT (GET_CODE (x)); int i, j; for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) fixes this, but then the replacement has higher cost in the end(?).