> Am 01.06.2025 um 04:16 schrieb Andrew Pinski <quic_apin...@quicinc.com>:
> 
> There are two places which forwprop replaces an original load to a few 
> different loads.
> Both can set the vuse manually instead of relying on update_ssa.
> One is doing a complex load followed by REAL/IMAG_PART only
> And the other is very similar but for vector loads followed by BIT_FIELD_REF.
> 
> Since this was the last place that needed to handle updating the ssa form,
> Remove the TODO_update_ssa also from the pass.

Ok

Richard 

> gcc/ChangeLog:
> 
>    * tree-ssa-forwprop.cc (optimize_vector_load): Set the vuse manually
>    on the new load statements. Also remove forward declaration since
>    the definition is before the first use.
>    (pass_forwprop::execute): Likewise for complex loads.
>    (pass_data_forwprop): Remove TODO_update_ssa.
> 
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
> gcc/tree-ssa-forwprop.cc | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
> index 81ea7d4195e..75901ecfbb0 100644
> --- a/gcc/tree-ssa-forwprop.cc
> +++ b/gcc/tree-ssa-forwprop.cc
> @@ -205,7 +205,6 @@ struct _vec_perm_simplify_seq
> typedef struct _vec_perm_simplify_seq *vec_perm_simplify_seq;
> 
> static bool forward_propagate_addr_expr (tree, tree, bool);
> -static void optimize_vector_load (gimple_stmt_iterator *);
> 
> /* Set to true if we delete dead edges during the optimization.  */
> static bool cfg_changed;
> @@ -3387,6 +3386,7 @@ optimize_vector_load (gimple_stmt_iterator *gsi)
>   gimple *stmt = gsi_stmt (*gsi);
>   tree lhs = gimple_assign_lhs (stmt);
>   tree rhs = gimple_assign_rhs1 (stmt);
> +  tree vuse = gimple_vuse (stmt);
> 
>   /* Gather BIT_FIELD_REFs to rewrite, looking through
>      VEC_UNPACK_{LO,HI}_EXPR.  */
> @@ -3495,6 +3495,7 @@ optimize_vector_load (gimple_stmt_iterator *gsi)
>      gimple *new_stmt = gimple_build_assign (tem, new_rhs);
>      location_t loc = gimple_location (use_stmt);
>      gimple_set_location (new_stmt, loc);
> +      gimple_set_vuse (new_stmt, vuse);
>      gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
>      /* Perform scalar promotion.  */
>      new_stmt = gimple_build_assign (gimple_assign_lhs (use_stmt),
> @@ -3514,6 +3515,7 @@ optimize_vector_load (gimple_stmt_iterator *gsi)
>                          new_rhs);
>      location_t loc = gimple_location (use_stmt);
>      gimple_set_location (new_stmt, loc);
> +      gimple_set_vuse (new_stmt, vuse);
>      gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
>    }
>       gimple_stmt_iterator gsi2 = gsi_for_stmt (use_stmt);
> @@ -4167,7 +4169,7 @@ const pass_data pass_data_forwprop =
>   0, /* properties_provided */
>   0, /* properties_destroyed */
>   0, /* todo_flags_start */
> -  TODO_update_ssa, /* todo_flags_finish */
> +  0, /* todo_flags_finish */
> };
> 
> class pass_forwprop : public gimple_opt_pass
> @@ -4404,6 +4406,7 @@ pass_forwprop::execute (function *fun)
>             component-wise loads.  */
>          use_operand_p use_p;
>          imm_use_iterator iter;
> +          tree vuse = gimple_vuse (stmt);
>          bool rewrite = true;
>          FOR_EACH_IMM_USE_FAST (use_p, iter, lhs)
>        {
> @@ -4443,6 +4446,7 @@ pass_forwprop::execute (function *fun)
> 
>              location_t loc = gimple_location (use_stmt);
>              gimple_set_location (new_stmt, loc);
> +              gimple_set_vuse (new_stmt, vuse);
>              gimple_stmt_iterator gsi2 = gsi_for_stmt (use_stmt);
>              unlink_stmt_vdef (use_stmt);
>              gsi_remove (&gsi2, true);
> --
> 2.43.0
> 

Reply via email to