re PR tree-optimization/83572 ([graphite] ICE in verify_dominators, at dominance...
authorRichard Biener <rguenther@suse.de>
Tue, 9 Jan 2018 08:55:26 +0000 (08:55 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 9 Jan 2018 08:55:26 +0000 (08:55 +0000)
2018-01-09  Richard Biener  <rguenther@suse.de>

PR tree-optimization/83572
* graphite.c: Include cfganal.h.
(graphite_transform_loops): Connect infinite loops to exit
and remove fake edges at the end.

* gcc.dg/graphite/pr83572.c: New testcase.

From-SVN: r256372

gcc/ChangeLog
gcc/graphite.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr83572.c [new file with mode: 0644]

index 8045f55b0fc8bb0325fd16fb360d6e34ddc2d819..813dca6472dbfad5836f1898496a6a90fc49f0dd 100644 (file)
@@ -1,3 +1,10 @@
+2018-01-09  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/83572
+       * graphite.c: Include cfganal.h.
+       (graphite_transform_loops): Connect infinite loops to exit
+       and remove fake edges at the end.
+
 2018-01-09  Jan Hubicka  <hubicka@ucw.cz>
 
        * ipa-inline.c (edge_badness): Revert accidental checkin.
index 8208d3dc32b2495c446adb3ebfe2df684e0cae9f..e5f318d44fd256b1f70b68a663b773c3b66f365d 100644 (file)
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "params.h"
 #include "pretty-print.h"
+#include "cfganal.h"
 
 #ifdef HAVE_isl
 #include "cfghooks.h"
@@ -350,6 +351,10 @@ graphite_transform_loops (void)
 
   calculate_dominance_info (CDI_DOMINATORS);
 
+  /* We rely on post-dominators during merging of SESE regions so those
+     have to be meaningful.  */
+  connect_infinite_loops_to_exit ();
+
   ctx = isl_ctx_alloc ();
   isl_options_set_on_error (ctx, ISL_ON_ERROR_ABORT);
   the_isl_ctx = ctx;
@@ -368,6 +373,10 @@ graphite_transform_loops (void)
   build_scops (&scops);
   free_dominance_info (CDI_POST_DOMINATORS);
 
+  /* Remove the fake exits before transform given they are not reflected
+     in loop structures we end up verifying.  */
+  remove_fake_exit_edges ();
+
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
       print_graphite_statistics (dump_file, scops);
@@ -428,7 +437,6 @@ graphite_transform_loops (void)
       release_recorded_exits (cfun);
       tree_estimate_probability (false);
     }
-
 }
 
 #else /* If isl is not available: #ifndef HAVE_isl.  */
index c73af5e087a71551f66ad2d1eb2c8660bca65371..ffade44558cdc52c48bcc422deb7163389f20dbd 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-09  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/83572
+       * gcc.dg/graphite/pr83572.c: New testcase.
+
 2018-01-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/83507
diff --git a/gcc/testsuite/gcc.dg/graphite/pr83572.c b/gcc/testsuite/gcc.dg/graphite/pr83572.c
new file mode 100644 (file)
index 0000000..1f65dc3
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O -floop-nest-optimize -fno-tree-loop-im" } */
+
+int u0, l1;
+
+void
+u3 (int s1)
+{
+  for (;;)
+    {
+      for (u0 = 0; u0 < 2; ++u0)
+       {
+       }
+
+      if (s1 != 0)
+       for (l1 = 0; l1 < 2; ++l1)
+         {
+         }
+
+      l1 = 0;
+    }
+}