From 8f2252625a841171aad0f7dda84f3811e03c7073 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Thu, 21 Jan 2016 02:13:42 +0000 Subject: [PATCH] check for unstructured control flow * graphite-scop-detection.c (scop_detection::harmful_loop_in_region): Discard unstructured if-then-else regions. Co-Authored-By: Sebastian Pop From-SVN: r232657 --- gcc/ChangeLog | 6 ++++++ gcc/graphite-scop-detection.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b593a8cc65..7e5bf1a6762 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-01-21 Aditya Kumar + Sebastian Pop + + * graphite-scop-detection.c (scop_detection::harmful_loop_in_region): + Discard unstructured if-then-else regions. + 2016-01-21 Aditya Kumar Sebastian Pop diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index d1b0fec1d4b..3f268a56c37 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.30.2