aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfganal.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-10 05:03:10 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-10 05:03:10 +0000
commit23652f377af0036b7c63b6ab274fb83af282f467 (patch)
tree453eca69dcf97f570dc02871c4ed8a3afd01fbff /gcc/cfganal.c
parent7f3f54da0db40a3bd068d1c91b90e91667ee7d77 (diff)
* cfganal.c (flow_dfs_compute_reverse_execute): Accept new
argument holding last unvisited block. Start search for unvisited blocks at LAST_UNVISITED rather than EXIT_BLOCK. (connect_infinite_loops_to_exit): Supply last unvisited block to flow_dfs_compute_reverse_execute. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@90386 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfganal.c')
-rw-r--r--gcc/cfganal.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index 06c71f678c6..b98459e2845 100644
--- a/gcc/cfganal.c
+++ b/gcc/cfganal.c
@@ -50,7 +50,8 @@ typedef struct depth_first_search_dsS *depth_first_search_ds;
static void flow_dfs_compute_reverse_init (depth_first_search_ds);
static void flow_dfs_compute_reverse_add_bb (depth_first_search_ds,
basic_block);
-static basic_block flow_dfs_compute_reverse_execute (depth_first_search_ds);
+static basic_block flow_dfs_compute_reverse_execute (depth_first_search_ds,
+ basic_block);
static void flow_dfs_compute_reverse_finish (depth_first_search_ds);
static bool flow_active_insn_p (rtx);
@@ -613,7 +614,7 @@ add_noreturn_fake_exit_edges (void)
void
connect_infinite_loops_to_exit (void)
{
- basic_block unvisited_block;
+ basic_block unvisited_block = EXIT_BLOCK_PTR;
struct depth_first_search_dsS dfs_ds;
/* Perform depth-first search in the reverse graph to find nodes
@@ -624,7 +625,8 @@ connect_infinite_loops_to_exit (void)
/* Repeatedly add fake edges, updating the unreachable nodes. */
while (1)
{
- unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds);
+ unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds,
+ unvisited_block);
if (!unvisited_block)
break;
@@ -847,7 +849,8 @@ flow_dfs_compute_reverse_add_bb (depth_first_search_ds data, basic_block bb)
available. */
static basic_block
-flow_dfs_compute_reverse_execute (depth_first_search_ds data)
+flow_dfs_compute_reverse_execute (depth_first_search_ds data,
+ basic_block last_unvisited)
{
basic_block bb;
edge e;
@@ -865,7 +868,7 @@ flow_dfs_compute_reverse_execute (depth_first_search_ds data)
}
/* Determine if there are unvisited basic blocks. */
- FOR_BB_BETWEEN (bb, EXIT_BLOCK_PTR, NULL, prev_bb)
+ FOR_BB_BETWEEN (bb, last_unvisited, NULL, prev_bb)
if (!TEST_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1)))
return bb;