]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-optimization/120143 - ICE with failed early break store move
authorRichard Biener <rguenther@suse.de>
Wed, 7 May 2025 07:43:54 +0000 (09:43 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 8 May 2025 06:36:53 +0000 (08:36 +0200)
The early break vectorization store moving was incorrectly trying
to move the pattern stmt instead of the original one which failed
to register and then confused virtual SSA form due to the update
triggered by a degenerate virtual PHI.

PR tree-optimization/120143
* tree-vect-data-refs.cc (vect_analyze_early_break_dependences):
Move/update the original stmts, not the pattern stmts which
lack virtual operands and are not in the IL.

* gcc.dg/vect/vect-early-break_135-pr120143.c: New testcase.

gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c [new file with mode: 0644]
gcc/tree-vect-data-refs.cc

diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c
new file mode 100644 (file)
index 0000000..1ee30a8
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-add-options vect_early_break } */
+/* { dg-additional-options "-O3 -fwhole-program" } */
+
+short a;
+extern _Bool b[][23];
+short g = 6;
+int v[4];
+int x[3];
+void c(short g, int v[], int x[]) {
+  for (;;)
+    for (unsigned y = 0; y < 023; y++) {
+      b[y][y] = v[y];
+      for (_Bool aa = 0; aa < (_Bool)g; aa = x[y])
+        a = a > 0;
+    }
+}
+int main() { c(g, v, x); }
index 231a3cab4f809159759de69c4e6631299331926f..9fd1ef2965066bcdd041d11536ca612541aa61f1 100644 (file)
@@ -734,7 +734,6 @@ vect_analyze_early_break_dependences (loop_vec_info loop_vinfo)
 
          stmt_vec_info stmt_vinfo
            = vect_stmt_to_vectorize (loop_vinfo->lookup_stmt (stmt));
-         stmt = STMT_VINFO_STMT (stmt_vinfo);
          auto dr_ref = STMT_VINFO_DATA_REF (stmt_vinfo);
          if (!dr_ref)
            continue;