https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120817
--- Comment #17 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #16)
> No, that cannot be required for correct operation. I think DSE is wrong in
> assessing that the store covers more than 5 bytes. The following fixes it
> for me
>
> diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc
> index 5ac4280ee36..51a572316cd 100644
> --- a/gcc/tree-ssa-dse.cc
> +++ b/gcc/tree-ssa-dse.cc
> @@ -181,10 +181,10 @@ initialize_ao_ref_for_dse (gimple *stmt, ao_ref
> *write, bool may_def_ok = false)
> can provide a may-def variant. */
> if (may_def_ok)
> {
> - ao_ref_init_from_ptr_and_size (
> - write, gimple_call_arg (stmt, 0),
> - TYPE_SIZE_UNIT (
> - TREE_TYPE (gimple_call_arg (stmt, stored_value_index))));
> + ao_ref_init_from_ptr_and_range (
> + write, gimple_call_arg (stmt, 0), true, 0, -1,
> + tree_to_poly_int64 (TYPE_SIZE (
> + TREE_TYPE (gimple_call_arg (stmt,
> stored_value_index)))));
> return true;
> }
> break;
>
That's the same as I was suggesting on IRC, the only difference is that I
handled it in the called, since the rang *is* known if the value is a poly
constant. So I think this change is overzealous as it does block vectp_+
POLY_INT_CST where we do know the offset.