On Fri, Jun 6, 2025 at 7:30 AM Andrew Pinski <quic_apin...@quicinc.com> wrote:
>
> To speed up things slightly, we can do the update of the vop for the
> newly inserted store manually.
> This will also allow a simplified part of cselim to be used inside
> phi-opt to move the store out earlier and independent of the full cselim.

OK.

Thanks,
Richard.

> gcc/ChangeLog:
>
>         * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Add vphi 
> argument.
>         Manually update the vphi and new_stmt vdef/lhs.
>         (cond_if_else_store_replacement): Update call to 
> cond_if_else_store_replacement_1.
>
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
>  gcc/tree-ssa-phiopt.cc | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc
> index bf493e12987..2e4f9dad327 100644
> --- a/gcc/tree-ssa-phiopt.cc
> +++ b/gcc/tree-ssa-phiopt.cc
> @@ -3605,7 +3605,8 @@ cond_store_replacement (basic_block middle_bb, 
> basic_block join_bb,
>  static bool
>  cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb,
>                                   basic_block join_bb, gimple *then_assign,
> -                                 gimple *else_assign)
> +                                 gimple *else_assign,
> +                                 gphi *vphi)
>  {
>    tree lhs_base, lhs, then_rhs, else_rhs, name;
>    location_t then_locus, else_locus;
> @@ -3672,6 +3673,14 @@ cond_if_else_store_replacement_1 (basic_block then_bb, 
> basic_block else_bb,
>    add_phi_arg (newphi, else_rhs, EDGE_SUCC (else_bb, 0), else_locus);
>
>    new_stmt = gimple_build_assign (lhs, gimple_phi_result (newphi));
> +  /* Update the vdef for the new store statement. */
> +  tree newvphilhs = make_ssa_name (gimple_vop (cfun));
> +  tree vdef = gimple_phi_result (vphi);
> +  gimple_set_vuse (new_stmt, newvphilhs);
> +  gimple_set_vdef (new_stmt, vdef);
> +  gimple_phi_set_result (vphi, newvphilhs);
> +  SSA_NAME_DEF_STMT (vdef) = new_stmt;
> +  update_stmt (vphi);
>    if (dump_file && (dump_flags & TDF_DETAILS))
>      {
>        fprintf(dump_file, "to use phi:\n");
> @@ -3782,7 +3791,7 @@ cond_if_else_store_replacement (basic_block then_bb, 
> basic_block else_bb,
>        gimple *else_assign = single_trailing_store_in_bb (else_bb, else_vdef);
>        if (else_assign)
>         return cond_if_else_store_replacement_1 (then_bb, else_bb, join_bb,
> -                                                then_assign, else_assign);
> +                                                then_assign, else_assign, 
> vphi);
>      }
>
>    /* If either vectorization or if-conversion is disabled then do
> @@ -3921,7 +3930,7 @@ cond_if_else_store_replacement (basic_block then_bb, 
> basic_block else_bb,
>        then_store = store_pair.first;
>        else_store = store_pair.second;
>        res = cond_if_else_store_replacement_1 (then_bb, else_bb, join_bb,
> -                                              then_store, else_store);
> +                                             then_store, else_store, vphi);
>        ok = ok || res;
>      }
>
> --
> 2.43.0
>

Reply via email to