On Fri, 23 Jun 2023, juzhe.zh...@rivai.ai wrote:

> From: Ju-Zhe Zhong <juzhe.zh...@rivai.ai>
> 
> gcc/ChangeLog:
> 
>         * tree-ssa-dse.cc (initialize_ao_ref_for_dse): Add LEN_MASK_STORE.
>         (dse_optimize_stmt): Ditto.
> 
> ---
>  gcc/tree-ssa-dse.cc | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc
> index 3c7a2e9992d..01b0951f1a9 100644
> --- a/gcc/tree-ssa-dse.cc
> +++ b/gcc/tree-ssa-dse.cc
> @@ -174,6 +174,23 @@ initialize_ao_ref_for_dse (gimple *stmt, ao_ref *write, 
> bool may_def_ok = false)
>             return true;
>           }
>         break;
> +       case IFN_LEN_MASK_STORE: {
> +         /* We cannot initialize a must-def ao_ref (in all cases) but we
> +            can provide a may-def variant.  */
> +         if (may_def_ok)
> +           {
> +             tree len_size
> +               = int_const_binop (MINUS_EXPR, gimple_call_arg (stmt, 2),
> +                                  gimple_call_arg (stmt, 5));

please use the accessors for the mask/len operand number where available.

Also I think this shows the existing IFN_LEN_STORE support is bogus
since the LEN argument isn't guaranteed to be constant.  Can you
fix this as well please?  If the length isn't constant the code should
be the same as the IFN_MASK_STORE variant.

> +             tree mask_size
> +               = TYPE_SIZE_UNIT (TREE_TYPE (gimple_call_arg (stmt, 4)));
> +             tree size = int_const_binop (MAX_EXPR, len_size, mask_size);
> +             ao_ref_init_from_ptr_and_size (write, gimple_call_arg (stmt, 0),
> +                                            size);
> +             return true;
> +           }
> +         break;
> +       }
>       default:;
>       }
>      }
> @@ -1502,6 +1519,7 @@ dse_optimize_stmt (function *fun, gimple_stmt_iterator 
> *gsi, sbitmap live_bytes)
>       {
>       case IFN_LEN_STORE:
>       case IFN_MASK_STORE:
> +     case IFN_LEN_MASK_STORE:
>         {
>           enum dse_store_status store_status;
>           store_status = dse_classify_store (&ref, stmt, false, live_bytes);
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)

Reply via email to