https://gcc.gnu.org/g:e58f3956c76af6b0651e83d29841141f2755695d

commit r16-6535-ge58f3956c76af6b0651e83d29841141f2755695d
Author: Richard Biener <[email protected]>
Date:   Tue Jan 6 13:39:30 2026 +0100

    tree-optimization/123315 - reset LOOP_VINFO_USING_DECREMENTING_IV_P
    
    The following resets LOOP_VINFO_USING_DECREMENTING_IV_P before
    re-trying.
    
            PR tree-optimization/123315
            * tree-vect-loop.cc (vect_analyze_loop_2): Reset
            LOOP_VINFO_USING_DECREMENTING_IV_P before retrying.
    
            * g++.dg/vect/pr123315.cc: New testcase.

Diff:
---
 gcc/testsuite/g++.dg/vect/pr123315.cc | 18 ++++++++++++++++++
 gcc/tree-vect-loop.cc                 |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/gcc/testsuite/g++.dg/vect/pr123315.cc 
b/gcc/testsuite/g++.dg/vect/pr123315.cc
new file mode 100644
index 000000000000..e9607976c6bb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr123315.cc
@@ -0,0 +1,18 @@
+// { dg-do compile }
+// { dg-additional-options "-O3 -fvect-cost-model=dynamic" }
+
+short a, b, c;
+long long e, f;
+extern int g[][2][2][23];
+inline long max(long a, long b)
+{
+  return a > b ? a : b;
+}
+void h(unsigned d)
+{
+  for (; d < 23; d++) {
+      c = b ?: g[1][1][1][d];
+      e = max(e, (long long)a);
+      f = max(f, (long long)7);
+  }
+}
diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 994d1a3ee749..033396417504 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -2730,6 +2730,8 @@ again:
   LOOP_VINFO_MUST_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
   LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo) = false;
   LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo) = false;
+  LOOP_VINFO_USING_DECREMENTING_IV_P (loop_vinfo) = false;
+
   if (loop_vinfo->scan_map)
     loop_vinfo->scan_map->empty ();

Reply via email to