On Thu, Nov 5, 2015 at 10:12 PM, Aditya Kumar <aditya...@samsung.com> wrote: > Irreducible regions are not going to be optimized by ISL > so discard them early. > > gcc/ChangeLog: > > 2015-11-06 Aditya Kumar <aditya...@samsung.com> > > * graphite-scop-detection.c (scop_detection::merge_sese): > (scop_detection::can_represent_loop_1): > (scop_detection::harmful_stmt_in_region):
Ok. I will add "Check flag *_IRREDUCIBLE_LOOP." to the changelog before committing. Thanks for taking care of this. Sebastian > > > --- > gcc/graphite-scop-detection.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c > index 8d67883..4e19b63 100644 > --- a/gcc/graphite-scop-detection.c > +++ b/gcc/graphite-scop-detection.c > @@ -605,7 +605,8 @@ scop_detection::merge_sese (sese_l first, sese_l second) > const > get_entry_bb (second)); > > edge entry = get_nearest_dom_with_single_entry (dom); > - if (!entry) > + > + if (!entry || (entry->flags & EDGE_IRREDUCIBLE_LOOP)) > return invalid_sese; > > basic_block pdom = nearest_common_dominator (CDI_POST_DOMINATORS, > @@ -614,7 +615,8 @@ scop_detection::merge_sese (sese_l first, sese_l second) > const > pdom = nearest_common_dominator (CDI_POST_DOMINATORS, dom, pdom); > > edge exit = get_nearest_pdom_with_single_exit (pdom); > - if (!exit) > + > + if (!exit || (exit->flags & EDGE_IRREDUCIBLE_LOOP)) > return invalid_sese; > > sese_l combined (entry, exit); > @@ -734,6 +736,7 @@ scop_detection::can_represent_loop_1 (loop_p loop, sese_l > scop) > struct tree_niter_desc niter_desc; > > return single_exit (loop) > + && (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP) > && number_of_iterations_exit (loop, single_exit (loop), &niter_desc, > false) > && niter_desc.control.no_overflow > && (niter = number_of_latch_executions (loop)) > @@ -864,6 +867,10 @@ scop_detection::harmful_stmt_in_region (sese_l scop) > const > if (!dominated_by_p (CDI_POST_DOMINATORS, bb, exit_bb)) > continue; > > + /* The basic block should not be part of an irreducible loop. */ > + if (bb->flags & BB_IRREDUCIBLE_LOOP) > + return true; > + > if (harmful_stmt_in_bb (scop, bb)) > return true; > } > -- > 2.1.0.243.g30d45f7 >