diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2004-10-18 21:16:53 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2004-10-18 21:16:53 +0000 |
commit | ab51c2f00c10b8b75267e34217b6fe88fc4f8cc8 (patch) | |
tree | 8bc3600a944edf4e5b58f2132c8e0f61bdc72961 | |
parent | 78b6731db8690985eba76af2c9b8741bfc85654c (diff) | |
download | gcc-ab51c2f00c10b8b75267e34217b6fe88fc4f8cc8.zip gcc-ab51c2f00c10b8b75267e34217b6fe88fc4f8cc8.tar.gz gcc-ab51c2f00c10b8b75267e34217b6fe88fc4f8cc8.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 15 |
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 94e4101..fb1fe2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2004-10-18 Kazu Hirata <kazu@cs.umass.edu> + * 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 <kazu@cs.umass.edu> + * tree-cfg.c (tree_forwarder_block_p): Don't set forwardable. (thread_jumps): Use forwardable as cache of tree_forwarder_block_p throughout the function. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 3fd8232..012ad70 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; } |