Applied to master (with rewrapped commit messages), thanks!
--Philipp.

On Thu, 25 Jun 2026 at 12:40, Richard Biener <[email protected]> wrote:
>
> On Mon, 22 Jun 2026, Konstantinos Eleftheriou wrote:
>
> >
> > After tail-merge merges duplicate blocks, the predecessors that branched to
> > them now branch to a single successor.  This series re-runs ifcombine on 
> > those
> > predecessors so that sequential comparisons feeding a common successor are
> > combined into one condition; on targets with conditional compares the 
> > backend
> > then emits ccmp, and elsewhere it helps wherever ifcombine's cost model 
> > already
> > prefers the combined form.
> >
> >   1/3 exports the ifcombine helpers via a new header.
> >   2/3 relaxes the uninit predicate analysis so a combined-condition shape 
> > does
> >       not produce bogus -Wmaybe-uninitialized warnings.
> >   3/3 collects the candidate predecessors after tail-merge and runs 
> > ifcombine
> >       on them to combine the conditions.
> >
> > Bootstrapped and regression-tested on aarch64-linux-gnu and
> > x86_64-linux-gnu.
>
> This series is OK.
>
> For fun I also asked gemini-cli to review it and it in the end said
>
> "The patch series is of **production-grade quality**. It solves PR102793
> with an elegant and general-purpose design that avoids hacks, leverages
> existing compiler frameworks (`ifcombine` and `predicate-analysis`), and
> successfully prevents regressions on critical loop transformations."
>
> Ha!
>
> Thanks,
> Richard.
>
> > Changes in v3:
> > - Drop the targetm.have_ccmp () gate; the post-tail-merge ifcombine now 
> > runs on
> >   all targets, leaving profitability to ifcombine's own cost model.
> > - Replace the maybe_undef_at_dom_frontier_p work-around with a fix in the 
> > uninit
> >   predicate analysis (relax the definition predicate by the maybe-undef
> >   operands' incoming-edge conditions).
> > - apply_clusters: hoist the immediate-dominator check ahead of
> >   recognize_if_then_else and assert the gcond.
> > - Add gcc.dg/uninit-pred-13.c covering the uninit interaction.
> > - Make the pr102793 tests target-independent (force the combine with
> >   --param logical-op-non-short-circuit=1, drop the ccmp dg-skip-if) and use
> >   __UINT64_TYPE__.
> > - ifcombine: do not combine the conditions guarding a loop.  Extend the
> >   existing niter-safety check (which already leaves integer/pointer loop 
> > exit
> >   conditions alone) to loop guards too, so the post-tail-merge combine no
> >   longer makes a guarded loop's number-of-iterations unanalyzable; this
> >   restores the IV elimination in gcc.dg/tree-ssa/ivopt_mult_1.c and
> >   ivopt_mult_2.c.
> > - pr117123.C: force --param logical-op-non-short-circuit=0 so this
> >   value-numbering test keeps its short-circuit form (3 ifs) on all targets,
> >   rather than being combined to 2 where the target defaults to
> >   non-short-circuit (e.g. x86).
> >
> > Konstantinos Eleftheriou (3):
> >   ifcombine: Add tree-ssa-ifcombine.h and update function signatures
> >   uninit: Relax PHI def predicate by maybe-undef edge conditions
> >   tail-merge: Combine conditions of merged blocks for ccmp [PR102793]
> >
> >  gcc/gimple-predicate-analysis.cc           | 96 ++++++++++++++++++++--
> >  gcc/gimple-predicate-analysis.h            |  2 +
> >  gcc/testsuite/g++.dg/tree-ssa/pr117123.C   |  2 +-
> >  gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c | 49 +++++++++++
> >  gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c | 50 +++++++++++
> >  gcc/testsuite/gcc.dg/uninit-pred-13.c      | 60 ++++++++++++++
> >  gcc/tree-ssa-ifcombine.cc                  | 41 +++++++--
> >  gcc/tree-ssa-ifcombine.h                   | 27 ++++++
> >  gcc/tree-ssa-tail-merge.cc                 | 60 +++++++++++++-
> >  9 files changed, 370 insertions(+), 17 deletions(-)
> >  create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c
> >  create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c
> >  create mode 100644 gcc/testsuite/gcc.dg/uninit-pred-13.c
> >  create mode 100644 gcc/tree-ssa-ifcombine.h
> >
> >
>
> --
> Richard Biener <[email protected]>
> SUSE Software Solutions Germany GmbH,
> Frankenstrasse 146, 90461 Nuernberg, Germany;
> GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to