http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60979

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
create_single_exit_edge uses make_forwarder_block which doesn't really do
things
in a way that works for incoming abnormal edges.

I can fix it by constraining SCOP detection.

Index: gcc/graphite-scop-detection.c
===================================================================
--- gcc/graphite-scop-detection.c       (revision 209849)
+++ gcc/graphite-scop-detection.c       (working copy)
@@ -474,8 +474,10 @@ scopdet_basic_block_info (basic_block bb
       result.exits = false;

       /* Mark bbs terminating a SESE region difficult, if they start
-        a condition.  */
-      if (!single_succ_p (bb))
+        a condition or if the block it exits to cannot be split
+        with make_forwarder_block.  */
+      if (!single_succ_p (bb)
+         || bb_has_abnormal_pred (single_succ (bb)))
        result.difficult = true;
       else
        result.exit = single_succ (bb);

Reply via email to