summaryrefslogtreecommitdiff
path: root/gcc/cfgloop.c
diff options
context:
space:
mode:
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-31 11:09:17 +0000
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-31 11:09:17 +0000
commit1bc9f141ac421850a0436df9832d4484e065f965 (patch)
treed4430a77bc104b74e1942c1593f798f1f7300879 /gcc/cfgloop.c
parent87f7fc8ffbe35389f88e68bbf60a672d7f463c02 (diff)
downloadgcc-1bc9f141ac421850a0436df9832d4484e065f965.tar.gz
* cfgloop.c (flow_loops_find): Initialize first and last fields
correctly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54104 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfgloop.c')
-rw-r--r--gcc/cfgloop.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
index aed264172fd..7b0c8415d88 100644
--- a/gcc/cfgloop.c
+++ b/gcc/cfgloop.c
@@ -644,7 +644,7 @@ flow_loops_find (loops, flags)
sbitmap *dom;
int *dfs_order;
int *rc_order;
- basic_block header;
+ basic_block header, bb;
/* This function cannot be repeatedly called with different
flags to build up the loop information. The loop tree
@@ -768,10 +768,16 @@ flow_loops_find (loops, flags)
These are often the same as the loop header and
loop latch respectively, but this is not always
the case. */
- loop->first
- = BASIC_BLOCK (sbitmap_first_set_bit (loop->nodes));
- loop->last
- = BASIC_BLOCK (sbitmap_last_set_bit (loop->nodes));
+
+ FOR_EACH_BB (bb)
+ if (TEST_BIT (loop->nodes, bb->index))
+ break;
+ loop->first = bb;
+
+ FOR_EACH_BB_REVERSE (bb)
+ if (TEST_BIT (loop->nodes, bb->index))
+ break;
+ loop->last = bb;
flow_loop_scan (loops, loop, flags);
}