]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-cfg.c (cleanup_tree_cfg): Don't iterate on thread_jumps.
authorKazu Hirata <kazu@cs.umass.edu>
Mon, 18 Oct 2004 21:16:53 +0000 (21:16 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Mon, 18 Oct 2004 21:16:53 +0000 (21:16 +0000)
* tree-cfg.c (cleanup_tree_cfg): Don't iterate on
thread_jumps.
(thread_jumps): Iterate until no new forwarder block arises.

From-SVN: r89244

gcc/ChangeLog
gcc/tree-cfg.c

index 94e41010025a4d89277649ebcf3864866b374d3f..fb1fe2f10e8bf749f64f93c5b166968085c277eb 100644 (file)
@@ -1,3 +1,9 @@
+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.
index 3fd8232719bf3d8a88de6d48217e90caa1857753..012ad706af75fa3235db0cf9b552db48e8d8fa34 100644 (file)
@@ -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;
 }