On Mon, 7 Jul 2025, Tamar Christina wrote: > > -----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 (); > }
Thanks - I added the testcase and pushed the change. Richard. > > > > > 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 > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)