re PR tree-optimization/83963 ([graphite] ICE in merge_sese, at graphite-scop-detection.c:517)
2018-01-22 Richard Biener <rguenther@suse.de> 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
This commit is contained in:
parent
74e95ed04f
commit
1dba94d42c
4 changed files with 55 additions and 18 deletions
|
@ -1,3 +1,11 @@
|
|||
2018-01-22 Richard Biener <rguenther@suse.de>
|
||||
|
||||
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 <kyrylo.tkachov@arm.com>
|
||||
|
||||
* doc/sourcebuild.texi (arm_softfloat): Document.
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2018-01-22 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/83963
|
||||
* gcc.dg/graphite/pr83963.c: New testcase.
|
||||
|
||||
2018-01-22 Sudakshina Das <sudi.das@arm.com>
|
||||
|
||||
|
|
31
gcc/testsuite/gcc.dg/graphite/pr83963.c
Normal file
31
gcc/testsuite/gcc.dg/graphite/pr83963.c
Normal file
|
@ -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;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue