[PATCH v1 0/1] tree-optimization/114502 - final value replacement for idempotent negation
Rachit Mehta via Sourceware Forge <[email protected]> Thu, 06 Aug 2026 11:05:30 +0000
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
Hi gcc-patches mailing list, Rachit Mehta via Sourceware Forge <[email protected]> has requested that the following forgejo pull request be published on the mailing list. Created on: 2026-07-30 10:55:55+00:00 Latest update: 2026-08-06 11:05:30+00:00 Changes: 4 changed files, 296 additions, 1 deletions Head revision: Rachit/gcc ref PR-114502 commit 7bda01c9f0fd3d2a364363a351cfec966b0bb511 Base revision: gcc/gcc ref trunk commit e873aac49eb2b58ae18e05f4150826278bdbb3cb r17-2839-ge873aac49eb2b5 Merge base: e873aac49eb2b58ae18e05f4150826278bdbb3cb Full diff url: https://forge.sourceware.org/gcc/gcc/pulls/206.diff Discussion: https://forge.sourceware.org/gcc/gcc/pulls/206 Requested Reviewers: SCEV cannot represent a period-2 recurrence, so recognize loops of the form 'c = -c' with a constant trip count in the final-value replacement and replace the exit value by c or -c depending on the parity of the trip count. Bail out when signed overflow must trap (-ftrapv) or be sanitized, mirroring the existing bitop special-cases. Tested on aarch64-linux-gnu: gcc.dg/tree-ssa/scev-negate-{1,2,3}.c all pass. PR tree-optimization/114502 ``` gcc/ChangeLog: * tree-scalar-evolution.cc (analyze_and_compute_negate_effect): New. (final_value_replacement_loop): Call it. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/scev-negate-1.c: New test. * gcc.dg/tree-ssa/scev-negate-2.c: New test. * gcc.dg/tree-ssa/scev-negate-3.c: New test. ``` Signed-off-by: Rachit Mehta <[email protected]> Changed files: - A: gcc/testsuite/gcc.dg/tree-ssa/scev-negate-1.c - A: gcc/testsuite/gcc.dg/tree-ssa/scev-negate-2.c - A: gcc/testsuite/gcc.dg/tree-ssa/scev-negate-3.c - M: gcc/tree-scalar-evolution.cc Rachit Mehta (1): tree-optimization/114502 - final value replacement for idempotent negation gcc/testsuite/gcc.dg/tree-ssa/scev-negate-1.c | 47 ++++++++ gcc/testsuite/gcc.dg/tree-ssa/scev-negate-2.c | 65 +++++++++++ gcc/testsuite/gcc.dg/tree-ssa/scev-negate-3.c | 82 ++++++++++++++ gcc/tree-scalar-evolution.cc | 103 +++++++++++++++++- 4 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/scev-negate-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/scev-negate-2.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/scev-negate-3.c -- 2.54.0