aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgloop.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-02-08 09:09:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-02-08 09:09:38 +0000
commit661bc682bcb87f5faa709f9bcd1679874f6652f6 (patch)
tree7376a6bbad1b83a2ca1875f856aea775280d8bbd /gcc/cfgloop.c
parent0d5049b238172839e3cddbe4d8befe62d701dc07 (diff)
downloadgcc-661bc682bcb87f5faa709f9bcd1679874f6652f6.zip
gcc-661bc682bcb87f5faa709f9bcd1679874f6652f6.tar.gz
gcc-661bc682bcb87f5faa709f9bcd1679874f6652f6.tar.bz2
cfgloop.c (verify_loop_structure): Properly handle a loop exiting to another loop header.
2013-02-08 Richard Biener <rguenther@suse.de> * cfgloop.c (verify_loop_structure): Properly handle a loop exiting to another loop header. * ira-int.h (ira_loops): Remove. * ira.c (ira_loops): Remove. (ira): Use loop_optimizer_init and loop_optimizer_finalize. (do_reload): Use loop_optimizer_finalize. * ira-build.c (create_loop_tree_nodes): Use get_loops and number_of_loops to access the loop tree. (more_one_region_p): Likewise. (finish_loop_tree_nodes): Likewise. (rebuild_regno_allocno_maps): Likewise. (mark_loops_for_removal): Likewise. (mark_all_loops_for_removal): Likewise. (remove_unnecessary_regions): Likewise. (ira_build): Likewise. * ira-emit.c (setup_entered_from_non_parent_p): Likewise. From-SVN: r195877
Diffstat (limited to 'gcc/cfgloop.c')
-rw-r--r--gcc/cfgloop.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
index 9806090..3c8df30 100644
--- a/gcc/cfgloop.c
+++ b/gcc/cfgloop.c
@@ -1542,7 +1542,12 @@ verify_loop_structure (void)
eloops++;
for (loop = bb->loop_father;
- loop != e->dest->loop_father;
+ loop != e->dest->loop_father
+ /* When a loop exit is also an entry edge which
+ can happen when avoiding CFG manipulations
+ then the last loop exited is the outer loop
+ of the loop entered. */
+ && loop != loop_outer (e->dest->loop_father);
loop = loop_outer (loop))
{
eloops--;