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(?).