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.
--- /dev/null
+// { 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);
+ }
+}
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 ();