On Mon, Apr 24, 2023 at 11:33 PM Andrew Pinski via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > In the early PHIOPT mode, the original minmax_replacement, would > replace a PHI node with up to 2 min/max expressions in some cases, > this allows for that too. > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
OK. > gcc/ChangeLog: > > * tree-ssa-phiopt.cc (phiopt_early_allow): Allow for > up to 2 min/max expressions in the sequence/match code. > --- > gcc/tree-ssa-phiopt.cc | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc > index fb2d2c9fc1a..de1896aa91a 100644 > --- a/gcc/tree-ssa-phiopt.cc > +++ b/gcc/tree-ssa-phiopt.cc > @@ -542,9 +542,23 @@ phiopt_early_allow (gimple_seq &seq, gimple_match_op &op) > return false; > tree_code code = (tree_code)op.code; > > - /* For non-empty sequence, only allow one statement. */ > + /* For non-empty sequence, only allow one statement > + except for MIN/MAX, allow max 2 statements, > + each with MIN/MAX. */ > if (!gimple_seq_empty_p (seq)) > { > + if (code == MIN_EXPR || code == MAX_EXPR) > + { > + if (!gimple_seq_singleton_p (seq)) > + return false; > + > + gimple *stmt = gimple_seq_first_stmt (seq); > + /* Only allow assignments. */ > + if (!is_gimple_assign (stmt)) > + return false; > + code = gimple_assign_rhs_code (stmt); > + return code == MIN_EXPR || code == MAX_EXPR; > + } > /* Check to make sure op was already a SSA_NAME. */ > if (code != SSA_NAME) > return false; > -- > 2.39.1 >