> -----Original Message----- > From: Richard Biener <rguent...@suse.de> > Sent: Monday, July 7, 2025 12:30 PM > To: gcc-patches@gcc.gnu.org > Cc: Tamar Christina <tamar.christ...@arm.com> > Subject: [PATCH] tree-optimization/120817 - bogus DSE of .MASK_STORE > > DSE used ao_ref_init_from_ptr_and_size for .MASK_STORE but > alias-analysis will use the specified size to disambiguate > against smaller objects. For .MASK_STORE we instead have to > make the access size unspecified but we can still constrain > the access extent based on the maximum size possible. > > Bootstrapped and tested on x86_64-unknown-linux-gnu. > > No testcase, I'd appreciate a runtime one.
Tested locally: /* { dg-require-effective-target vect_int } */ /* { dg-additional-options "-mcpu=neoverse-n2 -O1 -ftree-loop-vectorize" { target aarch64*-*-* } */ #include "tree-vect.h" typedef struct { int _M_current; } __normal_iterator; typedef struct { char _M_elems[5]; } array_5; __normal_iterator __trans_tmp_1 = {-5}; __attribute__((noipa)) array_5 copySourceIntoTarget() { array_5 target; char* target_it = target._M_elems; while (__trans_tmp_1._M_current != 0) { *target_it = 1; __trans_tmp_1._M_current++; target_it++; } return target; } int main () { check_vect (); array_5 res = copySourceIntoTarget(); #pragma GCC novector for (int i = 0; i < 5; i++) if (res._M_elems[i] != 1) __builtin_abort (); } -- > > PR tree-optimization/120817 > * tree-ssa-dse.cc (initialize_ao_ref_for_dse): Use > ao_ref_init_from_ptr_and_range with unknown size for > .MASK_STORE and .MASK_LEN_STORE. > --- > gcc/tree-ssa-dse.cc | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > 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; > -- > 2.43.0