OSDN Git Service

* tree-cfg.c (cleanup_tree_cfg): Speed up by calling
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Oct 2004 02:00:51 +0000 (02:00 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Oct 2004 02:00:51 +0000 (02:00 +0000)
delete_unrechable_blocks() only when necessary.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88419 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-cfg.c

index 24a1034..9dbb7fe 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-02  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * tree-cfg.c (cleanup_tree_cfg): Speed up by calling
+       delete_unrechable_blocks() only when necessary.
+
 2004-10-02  P.J. Darcy  <darcypj@us.ibm.com>
 
        * gthr-tpf.h (__gthread_recursive_mutex_t): New type.
index e047943..6919fac 100644 (file)
@@ -718,19 +718,29 @@ cleanup_tree_cfg (void)
   timevar_push (TV_TREE_CLEANUP_CFG);
 
   retval = cleanup_control_flow ();
+  retval |= delete_unreachable_blocks ();
 
-  /* These two transformations can cascade, so we iterate on them until
-     nothing changes.  */
+  /* thread_jumps() sometimes leaves further transformation
+     opportunities for itself, so iterate on it until nothing
+     changes.  */
   while (something_changed)
     {
-      something_changed = delete_unreachable_blocks ();
-      something_changed |= thread_jumps ();
+      something_changed = thread_jumps ();
+
+      /* delete_unreachable_blocks() does its job only when
+        thread_jumps() produces more unreachable blocks.  */
+      if (something_changed)
+       delete_unreachable_blocks ();
+
       retval |= something_changed;
     }
 
 #ifdef ENABLE_CHECKING
   if (retval)
-    gcc_assert (!cleanup_control_flow ());
+    {
+      gcc_assert (!cleanup_control_flow ());
+      gcc_assert (!delete_unreachable_blocks ());
+    }
 #endif
 
   /* Merging the blocks creates no new opportunities for the other