[PATCH 0/2] Handle idempotent and toggle recurrences in SCEV final value replacement
liuhongt <[email protected]> Tue, 4 Aug 2026 19:45:28 -0700
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
Structure:
- Motivation — SCEV can't represent non-polynomial recurrences, so
final_value_replacement_loop bails on MIN/NEG style loops whose exit value
depends only on the initial value (plus trip-count parity).
- Patch 1 — idempotent updates (MIN/MAX/AND/IOR/ABS): apply-once equals
apply-N-times, no niter reasoning needed.
- Patch 2 — toggle updates (NEG/NOT/XOR): parity of the latch count selects
between initial and toggled value; constant niter folds, symbolic niter emits
(niter & 1) == 0 ? toggled : initial.
Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}.
Ok for trunk?
liuhongt (2):
tree-scalar-evolution: Handle idempotent recurrences [PR124460]
tree-scalar-evolution: Handle toggle recurrences
gcc/testsuite/gcc.dg/tree-ssa/pr124460-1.c | 40 ++++++
gcc/testsuite/gcc.dg/tree-ssa/pr124460-2.c | 41 ++++++
gcc/testsuite/gcc.dg/tree-ssa/pr124460-3.c | 22 +++
gcc/testsuite/gcc.dg/tree-ssa/pr124460-4.c | 96 +++++++++++++
gcc/testsuite/gcc.dg/tree-ssa/pr124460-5.c | 40 ++++++
gcc/testsuite/gcc.target/i386/pr105735-1.c | 2 +-
gcc/testsuite/gcc.target/i386/pr105735-3.c | 2 +-
gcc/testsuite/gcc.target/i386/pr92080-12.c | 12 +-
gcc/tree-scalar-evolution.cc | 153 +++++++++++++--------
9 files changed, 343 insertions(+), 65 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr124460-1.c
create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr124460-2.c
create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr124460-3.c
create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr124460-4.c
create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr124460-5.c
--
2.34.1