From 23652f377af0036b7c63b6ab274fb83af282f467 Mon Sep 17 00:00:00 2001 From: law Date: Wed, 10 Nov 2004 05:03:10 +0000 Subject: * 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 --- gcc/cfganal.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'gcc/cfganal.c') 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; -- cgit v1.2.1