From: Richard Biener Date: Mon, 22 Jan 2018 13:10:57 +0000 (+0000) Subject: re PR tree-optimization/83963 ([graphite] ICE in merge_sese, at graphite-scop-detecti... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1dba94d42c835094c540e6cbeeaaa3c2e068a624;p=gcc.git re PR tree-optimization/83963 ([graphite] ICE in merge_sese, at graphite-scop-detection.c:517) 2018-01-22 Richard Biener PR tree-optimization/83963 * graphite-scop-detection.c (scop_detection::get_sese): Delay including the loop exit block. (scop_detection::merge_sese): Likewise. (scop_detection::add_scop): Do it here instead. * gcc.dg/graphite/pr83963.c: New testcase. From-SVN: r256943 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f3fe4f69710..bba9f63c11f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-01-22 Richard Biener + + PR tree-optimization/83963 + * graphite-scop-detection.c (scop_detection::get_sese): Delay + including the loop exit block. + (scop_detection::merge_sese): Likewise. + (scop_detection::add_scop): Do it here instead. + 2018-01-22 Kyrylo Tkachov * doc/sourcebuild.texi (arm_softfloat): Document. diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index b1122c227eb..6f407e16c88 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -420,13 +420,6 @@ scop_detection::get_sese (loop_p loop) edge scop_end = single_exit (loop); if (!scop_end || (scop_end->flags & (EDGE_COMPLEX|EDGE_FAKE))) return invalid_sese; - /* Include the BB with the loop-closed SSA PHI nodes. - canonicalize_loop_closed_ssa makes sure that is in proper shape. */ - if (! single_pred_p (scop_end->dest) - || ! single_succ_p (scop_end->dest) - || ! sese_trivially_empty_bb_p (scop_end->dest)) - gcc_unreachable (); - scop_end = single_succ_edge (scop_end->dest); return sese_l (scop_begin, scop_end); } @@ -507,17 +500,6 @@ scop_detection::merge_sese (sese_l first, sese_l second) const } while (! bitmap_empty_p (worklist)); - /* Include the BB with the loop-closed SSA PHI nodes. - canonicalize_loop_closed_ssa makes sure that is in proper shape. */ - if (exit->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) - && loop_exit_edge_p (exit->src->loop_father, exit)) - { - gcc_assert (single_pred_p (exit->dest) - && single_succ_p (exit->dest) - && sese_trivially_empty_bb_p (exit->dest)); - exit = single_succ_edge (exit->dest); - } - sese_l combined (entry, exit); DEBUG_PRINT (dp << "[merged-sese] s1: "; print_sese (dump_file, combined)); @@ -608,6 +590,18 @@ scop_detection::add_scop (sese_l s) { gcc_assert (s); + /* Include the BB with the loop-closed SSA PHI nodes, we need this + block in the region for code-generating out-of-SSA copies. + canonicalize_loop_closed_ssa makes sure that is in proper shape. */ + if (s.exit->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) + && loop_exit_edge_p (s.exit->src->loop_father, s.exit)) + { + gcc_assert (single_pred_p (s.exit->dest) + && single_succ_p (s.exit->dest) + && sese_trivially_empty_bb_p (s.exit->dest)); + s.exit = single_succ_edge (s.exit->dest); + } + /* Do not add scops with only one loop. */ if (region_has_one_loop (s)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 256ab140d4c..d64a841a49e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-01-22 Richard Biener + + PR tree-optimization/83963 + * gcc.dg/graphite/pr83963.c: New testcase. 2018-01-22 Sudakshina Das diff --git a/gcc/testsuite/gcc.dg/graphite/pr83963.c b/gcc/testsuite/gcc.dg/graphite/pr83963.c new file mode 100644 index 00000000000..6174463468e --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr83963.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O -floop-nest-optimize -fno-tree-loop-im" } */ + +int mg, et; + +void +s5 (int is) +{ + if (is == 0) + { +g6: + ++is; + } + + while (mg < 1) + { + while (et < 1) + { + if (is == 0) + return; + + ++et; + } + + while (mg < 1) + ++mg; + } + + goto g6; +} +