aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfgcleanup.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-cfgcleanup.c')
-rw-r--r--gcc/tree-cfgcleanup.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index fe22ed3..1f17d9a 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-scalar-evolution.h"
#include "gimple-match.h"
#include "gimple-fold.h"
+#include "tree-ssa-loop-niter.h"
/* The set of blocks in that at least one of the following changes happened:
@@ -885,6 +886,19 @@ remove_forwarder_block_with_phi (basic_block bb)
DEST. */
e = single_succ_edge (split_edge (e));
}
+ else
+ {
+ /* If we merge the forwarder into a loop header verify if we
+ are creating another loop latch edge. If so, reset
+ number of iteration information of the loop. */
+ if (dest->loop_father->header == dest
+ && dominated_by_p (CDI_DOMINATORS, e->src, dest))
+ {
+ dest->loop_father->any_upper_bound = false;
+ dest->loop_father->any_likely_upper_bound = false;
+ free_numbers_of_iterations_estimates_loop (dest->loop_father);
+ }
+ }
s = redirect_edge_and_branch (e, dest);