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);