> -----Original Message-----
> From: Richard Biener <[email protected]>
> Sent: Monday, July 7, 2025 12:30 PM
> To: [email protected]
> Cc: Tamar Christina <[email protected]>
> 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