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)

Reply via email to