summaryrefslogtreecommitdiff
path: root/gcc/cfgloop.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-10-23 19:56:19 +0100
committerRichard Sandiford <richard.sandiford@linaro.org>2017-10-23 19:56:19 +0100
commit7bef5b82e4109778a0988d20e19e1ed29dadd835 (patch)
treef5c594a5206e2b23c95741c1338fc1d11acffd25 /gcc/cfgloop.c
parent246229fdf9230ca040aa990a3fbb42698f30ae5f (diff)
parentb11bf8d85f574c56cab353544b50396c18ab9b93 (diff)
downloadgcc-7bef5b82e4109778a0988d20e19e1ed29dadd835.tar.gz
Merge trunk into sve
Diffstat (limited to 'gcc/cfgloop.c')
-rw-r--r--gcc/cfgloop.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
index 6911426787b..c3bd9c05013 100644
--- a/gcc/cfgloop.c
+++ b/gcc/cfgloop.c
@@ -1713,12 +1713,19 @@ loop_preheader_edge (const struct loop *loop)
edge e;
edge_iterator ei;
- gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS));
+ gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS)
+ && ! loops_state_satisfies_p (LOOPS_MAY_HAVE_MULTIPLE_LATCHES));
FOR_EACH_EDGE (e, ei, loop->header->preds)
if (e->src != loop->latch)
break;
+ if (! e)
+ {
+ gcc_assert (! loop_outer (loop));
+ return single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+ }
+
return e;
}