aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/graphite-scop-detection.c30
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr83963.c31
4 files changed, 55 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f3fe4f6..bba9f63 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index b1122c2..6f407e1 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 256ab14..d64a841 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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>
diff --git a/gcc/testsuite/gcc.dg/graphite/pr83963.c b/gcc/testsuite/gcc.dg/graphite/pr83963.c
new file mode 100644
index 0000000..6174463
--- /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;
+}
+