On Sun, Apr 23, 2023 at 12:11 AM Andrew Pinski via Gcc-patches
<[email protected]> wrote:
>
> This moves the check to make sure on the diamond shaped form bbs that
> the the two middle bbs are only for that diamond shaped form earlier
> in the shared code.
> Also remove the redundant check for single_succ_p since that was already
> done before hand.
> The next patch will simplify the code even further and remove redundant
> checks.
OK.
> gcc/ChangeLog:
>
> * tree-ssa-phiopt.cc (tree_ssa_phiopt_worker): Move the
> diamond form check from ...
> (minmax_replacement): Here.
> ---
> gcc/tree-ssa-phiopt.cc | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc
> index d886c88215b..296ba646e62 100644
> --- a/gcc/tree-ssa-phiopt.cc
> +++ b/gcc/tree-ssa-phiopt.cc
> @@ -220,6 +220,14 @@ tree_ssa_phiopt_worker (bool do_store_elim, bool
> do_hoist_loads, bool early_p)
> continue;
> }
>
> + if (diamond_p)
> + {
> + if (!single_pred_p (bb1)
> + || !single_pred_p (bb2)
> + || !single_succ_p (bb2))
> + continue;
> + }
> +
> if (do_store_elim && !diamond_p)
> {
> /* Also make sure that bb1 only have one predecessor and that it
> @@ -2032,12 +2040,6 @@ minmax_replacement (basic_block cond_bb, basic_block
> middle_bb, basic_block alt_
> tree alt_lhs, alt_op0, alt_op1;
> bool invert = false;
>
> - if (!single_pred_p (middle_bb)
> - || !single_pred_p (alt_middle_bb)
> - || !single_succ_p (middle_bb)
> - || !single_succ_p (alt_middle_bb))
> - return false;
> -
> /* When THREEWAY_P then e1 will point to the edge of the final
> transition
> from middle-bb to end. */
> if (true_edge == e0)
> --
> 2.39.1
>