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

commit r16-461-gda377e7ebf84a05943fb768eaeb7d682dee865fa
Author: Richard Biener <rguent...@suse.de>
Date:   Wed May 7 09:43:54 2025 +0200

    tree-optimization/120143 - ICE with failed early break store move
    
    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.

Diff:
---
 .../gcc.dg/vect/vect-early-break_135-pr120143.c        | 18 ++++++++++++++++++
 gcc/tree-vect-data-refs.cc                             |  1 -
 2 files changed, 18 insertions(+), 1 deletion(-)

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
index 000000000000..1ee30a821e2f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c
@@ -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); }
diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc
index 231a3cab4f80..9fd1ef296506 100644
--- a/gcc/tree-vect-data-refs.cc
+++ b/gcc/tree-vect-data-refs.cc
@@ -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;

Reply via email to