This fixes PR83238, biitstrapped and tested on x86_64-unknown-linux-gnu, 
applied.

Richard.

2017-12-04  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/83238
        * graphite-scop-detection.c (scop_detection::merge_sese): Make
        code match comment, rejecting invalid SESE regions.

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

Index: gcc/graphite-scop-detection.c
===================================================================
--- gcc/graphite-scop-detection.c       (revision 255309)
+++ gcc/graphite-scop-detection.c       (working copy)
@@ -570,8 +570,7 @@ scop_detection::merge_sese (sese_l first
      which post-dominates dom, until it stabilizes.  Also, ENTRY->SRC and
      EXIT->DEST should be in the same loop nest.  */
   if (!dominated_by_p (CDI_DOMINATORS, pdom, dom)
-      || loop_depth (entry->src->loop_father)
-        != loop_depth (exit->dest->loop_father))
+      || entry->src->loop_father != exit->dest->loop_father)
     return invalid_sese;
 
   /* For now we just bail out when there is a loop exit in the region
Index: gcc/testsuite/gcc.dg/graphite/pr83238.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr83238.c     (nonexistent)
+++ gcc/testsuite/gcc.dg/graphite/pr83238.c     (working copy)
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-parallelize-all" } */
+
+void
+vw (int *dk, int zd, int jb)
+{
+  int sq;
+  int *kv = &sq;
+
+  for (sq = 0; sq < 2; ++sq)
+    {
+      int u1;
+
+      for (u1 = 0; u1 < 5; ++u1)
+       if (zd == 0)
+         return;
+    }
+
+  for (;;)
+    {
+      ++zd;
+      if (zd == 0)
+       while (jb != 0)
+         kv = &jb;
+
+      while (*dk < 1)
+       {
+         for (jb = 0; jb < 2; ++jb)
+           {
+           }
+         ++*dk;
+       }
+
+      for (*kv = 0; *kv < 2; ++*kv)
+       for (*dk = 0; *dk < 2; ++*dk)
+         {
+         }
+    }
+}

Reply via email to