aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2004-10-18 21:16:53 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2004-10-18 21:16:53 +0000
commitab51c2f00c10b8b75267e34217b6fe88fc4f8cc8 (patch)
tree8bc3600a944edf4e5b58f2132c8e0f61bdc72961
parent78b6731db8690985eba76af2c9b8741bfc85654c (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/tree-cfg.c15
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;
}