From 49574486e65c03100fbf2993804ccc6dbb9051e6 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 6 Apr 2018 19:28:02 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/cfgloopmanip.c | 4 +++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.dg/graphite/pr84872.c | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/graphite/pr84872.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 36e775ddf1c..1a8fcf692d5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-04-06 Jakub Jelinek + + 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 * expr.c (copy_blkmode_to_reg): Revert 254862. diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index b9b76d80faa..27484850fd5 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 30423e224b9..25cda5027ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2018-04-06 Jakub Jelinek + 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 00000000000..4dcce967274 --- /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; +} -- 2.30.2