On Thu, Sep 26, 2024 at 5:11 PM Andrew Pinski <quic_apin...@quicinc.com> wrote:
>
> The ondemand maybe_undef that follows phis was added in 
> r7-6427-g8b670f93ab1136
> but then later ssa_name_maybe_undef_p/mark_ssa_maybe_undefs was added in
> r13-972-gbe2861fe8c527a. This moves the ondemand one to use
> mark_ssa_maybe_undefs/ssa_name_maybe_undef_p instead. Which itself will be
> faster since the mark_ssa_maybe_undefs is a walk based on the uses of
> undefined names (and only once) rather than a walk based on the def of
> ones which are more likely defined (and on demand).
>
> Even though the ondemand maybe_undef had some extra special cases, those 
> won't make
> a big difference in most code.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

Thanks,
Richard.

>         PR tree-optimization/116848
>
> gcc/ChangeLog:
>
>         * tree-ssa-loop-unswitch.cc (tree_ssa_unswitch_loops): Call 
> mark_ssa_maybe_undefs.
>         (is_maybe_undefined): Call ssa_name_maybe_undef_p instead of ondemand 
> undef.
>
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
>  gcc/tree-ssa-loop-unswitch.cc | 61 ++---------------------------------
>  1 file changed, 2 insertions(+), 59 deletions(-)
>
> diff --git a/gcc/tree-ssa-loop-unswitch.cc b/gcc/tree-ssa-loop-unswitch.cc
> index 7601d91e807..847f7ac739f 100644
> --- a/gcc/tree-ssa-loop-unswitch.cc
> +++ b/gcc/tree-ssa-loop-unswitch.cc
> @@ -329,6 +329,7 @@ tree_ssa_unswitch_loops (function *fun)
>    bool changed_unswitch = false;
>    bool changed_hoist = false;
>    auto_edge_flag ignored_edge_flag (fun);
> +  mark_ssa_maybe_undefs ();
>
>    ranger = enable_ranger (fun);
>
> @@ -427,65 +428,7 @@ is_maybe_undefined (const tree name, gimple *stmt, class 
> loop *loop)
>    if (gimple_bb (stmt) == loop->header)
>      return false;
>
> -  auto_bitmap visited_ssa;
> -  auto_vec<tree> worklist;
> -  worklist.safe_push (name);
> -  bitmap_set_bit (visited_ssa, SSA_NAME_VERSION (name));
> -  while (!worklist.is_empty ())
> -    {
> -      tree t = worklist.pop ();
> -
> -      /* If it's obviously undefined, avoid further computations.  */
> -      if (ssa_undefined_value_p (t, true))
> -       return true;
> -
> -      if (ssa_defined_default_def_p (t))
> -       continue;
> -
> -      gimple *def = SSA_NAME_DEF_STMT (t);
> -
> -      /* Check that all the PHI args are fully defined.  */
> -      if (gphi *phi = dyn_cast <gphi *> (def))
> -       {
> -         for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
> -           {
> -             tree t = gimple_phi_arg_def (phi, i);
> -             /* If an SSA has already been seen, it may be a loop,
> -                but we can continue and ignore this use.  Otherwise,
> -                add the SSA_NAME to the queue and visit it later.  */
> -             if (TREE_CODE (t) == SSA_NAME
> -                 && bitmap_set_bit (visited_ssa, SSA_NAME_VERSION (t)))
> -               worklist.safe_push (t);
> -           }
> -         continue;
> -       }
> -
> -      /* Uses in stmts always executed when the region header executes
> -        are fine.  */
> -      if (dominated_by_p (CDI_DOMINATORS, loop->header, gimple_bb (def)))
> -       continue;
> -
> -      /* Handle calls and memory loads conservatively.  */
> -      if (!is_gimple_assign (def)
> -         || (gimple_assign_single_p (def)
> -             && gimple_vuse (def)))
> -       return true;
> -
> -      /* Check that any SSA names used to define NAME are also fully
> -        defined.  */
> -      use_operand_p use_p;
> -      ssa_op_iter iter;
> -      FOR_EACH_SSA_USE_OPERAND (use_p, def, iter, SSA_OP_USE)
> -       {
> -         tree t = USE_FROM_PTR (use_p);
> -         /* If an SSA has already been seen, it may be a loop,
> -            but we can continue and ignore this use.  Otherwise,
> -            add the SSA_NAME to the queue and visit it later.  */
> -         if (bitmap_set_bit (visited_ssa, SSA_NAME_VERSION (t)))
> -           worklist.safe_push (t);
> -       }
> -    }
> -  return false;
> +  return ssa_name_maybe_undef_p (name);
>  }
>
>  /* Checks whether we can unswitch LOOP on condition at end of BB -- one of 
> its
> --
> 2.34.1
>

Reply via email to