aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-04-06 19:28:02 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-06 19:28:02 +0200
commit49574486e65c03100fbf2993804ccc6dbb9051e6 (patch)
tree2fbf8db3f4b3ec9b083a6e42b82d0f5d987d4f9d
parente83bc9d77564eeadcc415dbbc1352b3aaabb4fa7 (diff)
downloadgcc-49574486e65c03100fbf2993804ccc6dbb9051e6.zip
gcc-49574486e65c03100fbf2993804ccc6dbb9051e6.tar.gz
gcc-49574486e65c03100fbf2993804ccc6dbb9051e6.tar.bz2
re PR rtl-optimization/84872 (ICE in create_preheader, at cfgloopmanip.c:1536)
PR rtl-optimization/84872 * cfgloopmanip.c (create_preheader): Use make_forwarder_block even if nentry == 1 when CP_FALLTHRU_PREHEADERS and single_entry is EDGE_CROSSING edge. * gcc.dg/graphite/pr84872.c: New test. From-SVN: r259182
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfgloopmanip.c4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr84872.c19
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 36e775d..1a8fcf6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-04-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/84872
+ * cfgloopmanip.c (create_preheader): Use make_forwarder_block even if
+ nentry == 1 when CP_FALLTHRU_PREHEADERS and single_entry is
+ EDGE_CROSSING edge.
+
2018-04-06 Tamar Christina <tamar.christina@arm.com>
* expr.c (copy_blkmode_to_reg): Revert 254862.
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index b9b76d8..2748485 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -1494,7 +1494,9 @@ create_preheader (struct loop *loop, int flags)
mfb_kj_edge = loop_latch_edge (loop);
latch_edge_was_fallthru = (mfb_kj_edge->flags & EDGE_FALLTHRU) != 0;
- if (nentry == 1)
+ if (nentry == 1
+ && ((flags & CP_FALLTHRU_PREHEADERS) == 0
+ || (single_entry->flags & EDGE_CROSSING) == 0))
dummy = split_edge (single_entry);
else
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 30423e2..25cda50 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2018-04-06 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/84872
+ * gcc.dg/graphite/pr84872.c: New test.
+
PR c++/85210
* g++.dg/cpp1z/decomp42.C: New test.
diff --git a/gcc/testsuite/gcc.dg/graphite/pr84872.c b/gcc/testsuite/gcc.dg/graphite/pr84872.c
new file mode 100644
index 0000000..4dcce96
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr84872.c
@@ -0,0 +1,19 @@
+/* PR rtl-optimization/84872 */
+/* { dg-do compile { target pthread } } */
+/* { dg-options "-O1 -floop-parallelize-all -freorder-blocks-and-partition -fschedule-insns2 -fselective-scheduling2 -fsel-sched-pipelining -fno-tree-dce" } */
+
+void
+foo (int x)
+{
+ int a[2];
+ int b, c = 0;
+
+ for (b = 0; b < 2; ++b)
+ a[b] = 0;
+ for (b = 0; b < 2; ++b)
+ a[b] = 0;
+
+ while (c < 1)
+ while (x < 1)
+ ++x;
+}