From: Kazu Hirata Date: Mon, 18 Oct 2004 21:16:53 +0000 (+0000) Subject: tree-cfg.c (cleanup_tree_cfg): Don't iterate on thread_jumps. X-Git-Tag: releases/gcc-4.0.0~3927 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ab51c2f00c10b8b75267e34217b6fe88fc4f8cc8;p=thirdparty%2Fgcc.git tree-cfg.c (cleanup_tree_cfg): Don't iterate on thread_jumps. * tree-cfg.c (cleanup_tree_cfg): Don't iterate on thread_jumps. (thread_jumps): Iterate until no new forwarder block arises. From-SVN: r89244 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 94e41010025a..fb1fe2f10e8b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-10-18 Kazu Hirata + + * tree-cfg.c (cleanup_tree_cfg): Don't iterate on + thread_jumps. + (thread_jumps): Iterate until no new forwarder block arises. + 2004-10-18 Kazu Hirata * tree-cfg.c (tree_forwarder_block_p): Don't set forwardable. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 3fd8232719bf..012ad706af75 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -718,18 +718,14 @@ cleanup_tree_cfg (void) retval = cleanup_control_flow (); retval |= delete_unreachable_blocks (); - - /* thread_jumps sometimes leaves further transformation - opportunities for itself, so iterate on it until nothing - changes. */ - while (thread_jumps ()) - retval = true; + retval |= thread_jumps (); #ifdef ENABLE_CHECKING if (retval) { gcc_assert (!cleanup_control_flow ()); gcc_assert (!delete_unreachable_blocks ()); + gcc_assert (!thread_jumps ()); } #endif @@ -3780,10 +3776,13 @@ thread_jumps (void) tree phi; int arg; bool retval = false; + bool rerun; FOR_EACH_BB (bb) bb_ann (bb)->forwardable = tree_forwarder_block_p (bb); + restart: + rerun = false; FOR_EACH_BB (bb) { edge_iterator ei; @@ -3945,8 +3944,10 @@ thread_jumps (void) two arms eventually merge without any intervening statements. */ if (this_jump_threaded && tree_forwarder_block_p (bb)) - bb_ann (bb)->forwardable = true; + bb_ann (bb)->forwardable = rerun = true; } + if (rerun) + goto restart; return retval; }