+2015-11-06 Aditya Kumar <aditya.k7@samsung.com>
+ Sebastian Pop <s.pop@samsung.com>
+
+ * graphite-scop-detection.c (scop_detection::merge_sese): Entry
+ and exit edges should not be a part of irreducible loop.
+ (scop_detection::can_represent_loop_1): Loops should not be
+ irreducible.
+ (scop_detection::harmful_stmt_in_region): All the basic block
+ should belong to reducible loops.
+
2015-11-06 Christophe Lyon <christophe.lyon@linaro.org>
* config/aarch64/aarch64-simd-builtins.def: Update builtins
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,
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);
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))
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;
}