https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93990
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I have tried: --- gcc/config/i386/i386-expand.c.jj 2020-01-12 11:54:36.323414766 +0100 +++ gcc/config/i386/i386-expand.c 2020-03-03 12:44:54.116134173 +0100 @@ -11902,7 +11902,18 @@ rdseed_step: emit_insn (gen_rtx_SET (target, pat)); /* Store the result. */ - emit_move_insn (gen_rtx_MEM (mode0, op4), op0); + { + op4 = gen_rtx_MEM (mode0, op4); + tree type = (mode0 == SImode ? unsigned_type_node + : long_long_unsigned_type_node); + if (TREE_CODE (arg3) == ADDR_EXPR + && useless_type_conversion_p (TREE_TYPE (TREE_OPERAND (arg3, 0)), + type)) + set_mem_attributes (op4, TREE_OPERAND (arg3, 0), 0); + else + set_mem_attributes (op4, type, 0); + emit_move_insn (op4, op0); + } return target; but even that doesn't help, the stores now have [1 result0+0 S8 A64] instead of former [0 S8 A8], but RTL DSE still doesn't remove those for whatever reason.