re PR tree-optimization/64406 (ICE: SIGSEGV in estimate_numbers_of_iterations_loop...
authorRichard Biener <rguenther@suse.de>
Tue, 13 Jan 2015 13:41:46 +0000 (13:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 13 Jan 2015 13:41:46 +0000 (13:41 +0000)
2015-01-13  Richard Biener  <rguenther@suse.de>

PR tree-optimization/64406
* tree-loop-distibution.c (pass_loop_distribution::execute):
Reset the SCEV hashtable if we distributed anything.

* gcc.dg/pr64406.c: New testcase.

From-SVN: r219528

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr64406.c [new file with mode: 0644]
gcc/tree-loop-distribution.c

index d99589b2cabe2243aad37110df801ced2395a8e5..ba272a1d606c7667f9e5d5fae2a3b307f4a867a0 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-13  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64406
+       * tree-loop-distibution.c (pass_loop_distribution::execute):
+       Reset the SCEV hashtable if we distributed anything.
+
 2015-01-13  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/64404
index 854d5f446113c111e97c48e9178da85ba89df552..819a122c920e378e1f8aaade9140a6dd6ffd0c5a 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-13  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64406
+       * gcc.dg/pr64406.c: New testcase.
+
 2015-01-13  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/64404
diff --git a/gcc/testsuite/gcc.dg/pr64406.c b/gcc/testsuite/gcc.dg/pr64406.c
new file mode 100644 (file)
index 0000000..8af8e55
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-loop-distribute-patterns -fno-tree-loop-ivcanon -fno-tree-loop-vectorize -ftree-vectorize" } */
+
+unsigned in[72];
+
+void bar (unsigned out[], unsigned ia[]);
+
+void
+foo ()
+{
+  int i;
+  unsigned out[72], ia[8];
+  for (i = 0; i < 8; i++)
+    {
+      out[i * 8] = in[i * 8] + 5;
+      out[i * 8 + 1] = in[i * 8 + 1] + 6;
+      out[i * 8 + 2] = in[i * 8 + 2] + 7;
+      out[i * 8 + 3] = in[i * 8 + 3] + 8;
+      out[i * 8 + 4] = in[i * 8 + 4] + 9;
+      out[i * 8 + 5] = in[i * 8 + 5] + 10;
+      out[i * 8 + 6] = in[i * 8 + 6] + 11;
+      out[i * 8 + 7] = in[i * 8 + 7] + 12;
+      ia[i] = in[i];
+    }
+  bar (out, ia);
+}
index ecd51fb788a10ad6aa430419bc580e794d670157..904f4e8db60bd1efa3df808f2b3f9f350182b3a3 100644 (file)
@@ -1838,6 +1838,9 @@ out:
 
   if (changed)
     {
+      /* Cached scalar evolutions now may refer to wrong or non-existing
+        loops.  */
+      scev_reset_htab ();
       mark_virtual_operands_for_renaming (fun);
       rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
     }