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.