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 ();
