From: Sebastian Pop <s....@samsung.com>

        * graphite-scop-detection.c (scop_detection::harmful_loop_in_region):
        Discard unstructured if-then-else regions.
---
 gcc/graphite-scop-detection.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index a0c630b..f035e0d 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -1078,6 +1078,18 @@ scop_detection::harmful_loop_in_region (sese_l scop) 
const
          return true;
        }
 
+      /* Check for unstructured control flow: CFG not generated by structured
+        if-then-else.  */
+      if (bb->succs->length () > 1)
+       {
+         edge e;
+         edge_iterator ei;
+         FOR_EACH_EDGE (e, ei, bb->succs)
+           if (!dominated_by_p (CDI_POST_DOMINATORS, bb, e->dest)
+               && !dominated_by_p (CDI_DOMINATORS, e->dest, bb))
+             return true;
+       }
+
       /* Collect all loops in the current region.  */
       loop_p loop = bb->loop_father;
       if (loop_in_sese_p (loop, scop))
-- 
2.5.0

Reply via email to