On Sun, Sep 3, 2023 at 6:19 PM Andrew Pinski via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > This improves rewrite_to_defined_overflow slightly if we already > have an unsigned type. The only place where this seems to show up > is ifcombine. It removes one extra statement which gets added and > then later on removed.
What specific case is that? It sounds like we call the function when it isn't needed? I also think that refactoring to a special case when the LHS type already is OK will result in better code in the end. Richard. > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. > > gcc/ChangeLog: > > PR tree-optimization/111276 > * gimple-fold.cc (rewrite_to_defined_overflow): Don't > add a new lhs if we already the unsigned type. > --- > gcc/gimple-fold.cc | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc > index fd01810581a..2fcafeada37 100644 > --- a/gcc/gimple-fold.cc > +++ b/gcc/gimple-fold.cc > @@ -8721,10 +8721,19 @@ rewrite_to_defined_overflow (gimple *stmt, bool > in_place /* = false */) > op = gimple_convert (&stmts, type, op); > gimple_set_op (stmt, i, op); > } > - gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt)); > + bool needs_cast_back = false; > + if (!useless_type_conversion_p (type, TREE_TYPE (lhs))) > + { > + gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt)); > + needs_cast_back = true; > + } > + > if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR) > gimple_assign_set_rhs_code (stmt, PLUS_EXPR); > - gimple_set_modified (stmt, true); > + > + if (needs_cast_back || stmts) > + gimple_set_modified (stmt, true); > + > if (in_place) > { > gimple_stmt_iterator gsi = gsi_for_stmt (stmt); > @@ -8734,6 +8743,10 @@ rewrite_to_defined_overflow (gimple *stmt, bool > in_place /* = false */) > } > else > gimple_seq_add_stmt (&stmts, stmt); > + > + if (!needs_cast_back) > + return stmts; > + > gimple *cvt = gimple_build_assign (lhs, NOP_EXPR, gimple_assign_lhs > (stmt)); > if (in_place) > { > -- > 2.31.1 >