diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-04-06 19:28:02 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-04-06 19:28:02 +0200 |
commit | 49574486e65c03100fbf2993804ccc6dbb9051e6 (patch) | |
tree | 2fbf8db3f4b3ec9b083a6e42b82d0f5d987d4f9d | |
parent | e83bc9d77564eeadcc415dbbc1352b3aaabb4fa7 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cfgloopmanip.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr84872.c | 19 |
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; +} |