From 01b1115e9b3b8e786ecfea2f3084821f072b7ea8 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 6 May 2020 10:23:15 +0200 Subject: middle-end/94964 - avoid EH loop entry with CP_SIMPLE_PREHEADERS Loop optimizers expect to be able to insert on the preheader edge w/o splitting it thus avoid ending up with a preheader that enters the loop via an EH edge (or an abnormal edge). 2020-05-06 Richard Biener PR middle-end/94964 * cfgloopmanip.c (create_preheader): Require non-complex preheader edge for CP_SIMPLE_PREHEADERS. --- gcc/ChangeLog | 6 ++++++ gcc/cfgloopmanip.c | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73a6015..ae6dd06 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2020-05-06 Richard Biener + PR middle-end/94964 + * cfgloopmanip.c (create_preheader): Require non-complex + preheader edge for CP_SIMPLE_PREHEADERS. + +2020-05-06 Richard Biener + PR tree-optimization/94963 * tree-ssa-loop-im.c (execute_sm_if_changed): Remove no-warning marking of the conditional store. diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 50c7267..73134a2 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -1506,9 +1506,10 @@ create_preheader (class loop *loop, int flags) else { /* If we want simple preheaders, also force the preheader to have - just a single successor. */ + just a single successor and a normal edge. */ if ((flags & CP_SIMPLE_PREHEADERS) - && !single_succ_p (single_entry->src)) + && ((single_entry->flags & EDGE_COMPLEX) + || !single_succ_p (single_entry->src))) need_forwarder_block = true; /* If we want fallthru preheaders, also create forwarder block when preheader ends with a jump or has predecessors from loop. */ -- cgit v1.1