This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix vectorizer ICE (PR tree-optimization/53409)


Hi!

On the following testcase we ICE, because op_def_stmt isn't inside
of the loop (phi is a degenerate phi referencing a phi result from before the
loop) and stmts outside of the loop don't have uid set (or it can contain
garbage).

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.7?

2012-05-21  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/53409
	* tree-vect-loop.c (vect_analyze_loop_operations): Don't check
	vinfo_for_stmt (op_def_stmt) if op_def_stmt isn't inside loop.

	* gcc.c-torture/compile/pr53409.c: New test.

--- gcc/tree-vect-loop.c.jj	2012-05-17 08:40:45.000000000 +0200
+++ gcc/tree-vect-loop.c	2012-05-21 11:30:28.721333458 +0200
@@ -1327,7 +1327,9 @@ vect_analyze_loop_operations (loop_vec_i
                     return false;
 
                   op_def_stmt = SSA_NAME_DEF_STMT (phi_op);
-                  if (!op_def_stmt || !vinfo_for_stmt (op_def_stmt))
+		  if (!op_def_stmt
+		      || !flow_bb_inside_loop_p (loop, gimple_bb (op_def_stmt))
+		      || !vinfo_for_stmt (op_def_stmt))
                     return false;
 
                   if (STMT_VINFO_RELEVANT (vinfo_for_stmt (op_def_stmt))
--- gcc/testsuite/gcc.c-torture/compile/pr53409.c.jj	2012-05-21 11:33:23.621318856 +0200
+++ gcc/testsuite/gcc.c-torture/compile/pr53409.c	2012-05-21 11:33:13.000000000 +0200
@@ -0,0 +1,19 @@
+/* PR tree-optimization/53409 */
+
+int a, c, d, e, f;
+int b[0];
+
+int
+main ()
+{
+  if (f)
+    e = 0;
+  int g = d;
+  for (c = 0; c <= 1; c++)
+    {
+      for (a = 0; a <= 1; a = (char) a + 1)
+	b[c] = g;
+      a = 0;
+    }
+  return 0;
+}

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]