On Wed, Apr 23, 2025 at 5:59 AM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > To speed up things slightly so not needing to call all the way through > to match and simplify, we should return early for true/false on GIMPLE_COND.
I think we'd still canonicalize the various forms matched by gimple_cond_true/false_p to a standard one - we should go through resimplify2 which should constant fold the compare and in the end we do gimple_cond_make_true/false. I'm also not sure it's worth short-cutting this, it shouldn't be common to fold an already canonical if (0) or if (1), no? Richard. > gcc/ChangeLog: > > * gimple-fold.cc (fold_stmt_1): For GIMPLE_COND return early > for true/false. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/gimple-fold.cc | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc > index 94d5a1ebbd7..2381a82d2b1 100644 > --- a/gcc/gimple-fold.cc > +++ b/gcc/gimple-fold.cc > @@ -6646,12 +6646,19 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace, > tree (*valueize) (tree), > break; > case GIMPLE_COND: > { > + gcond *gc = as_a <gcond *> (stmt); > + /* If the cond is already true/false, just return false. */ > + if (gimple_cond_true_p (gc) > + || gimple_cond_false_p (gc)) > + { > + fold_undefer_overflow_warnings (false, stmt, 0); > + return false; > + } > /* Canonicalize operand order. */ > - tree lhs = gimple_cond_lhs (stmt); > - tree rhs = gimple_cond_rhs (stmt); > + tree lhs = gimple_cond_lhs (gc); > + tree rhs = gimple_cond_rhs (gc); > if (tree_swap_operands_p (lhs, rhs)) > { > - gcond *gc = as_a <gcond *> (stmt); > gimple_cond_set_lhs (gc, rhs); > gimple_cond_set_rhs (gc, lhs); > gimple_cond_set_code (gc, > -- > 2.43.0 >