OSDN Git Service

* tree-cfgcleanup.c (cleanup_tree_cfg): Fix flowgraph change
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Aug 2005 18:52:55 +0000 (18:52 +0000)
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Aug 2005 18:52:55 +0000 (18:52 +0000)
indicator.  Return true if the flowgraph changed during
cleanup.

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

gcc/ChangeLog
gcc/tree-cfgcleanup.c

index f19ee5c..8d37b88 100644 (file)
@@ -1,5 +1,11 @@
 2005-08-19  Diego Novillo  <dnovillo@redhat.com>
 
+       * tree-cfgcleanup.c (cleanup_tree_cfg): Fix flowgraph change
+       indicator.  Return true if the flowgraph changed during
+       cleanup.
+
+2005-08-19  Diego Novillo  <dnovillo@redhat.com>
+
        PR 23476
        * tree-cfgcleanup.c (cleanup_control_expr_graph): Fold the
        conditional expression before testing its value.
index 0f8bfc5..7e719c1 100644 (file)
@@ -523,17 +523,24 @@ cleanup_tree_cfg_1 (void)
 }
 
 
-/* Remove unreachable blocks and other miscellaneous clean up work.  */
+/* Remove unreachable blocks and other miscellaneous clean up work.
+   Return true if the flowgraph was modified, false otherwise.  */
 
 bool
 cleanup_tree_cfg (void)
 {
-  bool retval;
+  bool retval, changed;
 
   timevar_push (TV_TREE_CLEANUP_CFG);
 
+  /* Iterate until there are no more cleanups left to do.  If any
+     iteration changed the flowgraph, set CHANGED to true.  */
+  changed = false;
   do
-    retval = cleanup_tree_cfg_1 ();
+    {
+      retval = cleanup_tree_cfg_1 ();
+      changed |= retval;
+    }
   while (retval);
 
   compact_blocks ();
@@ -544,7 +551,7 @@ cleanup_tree_cfg (void)
 
   timevar_pop (TV_TREE_CLEANUP_CFG);
 
-  return retval;
+  return changed;
 }
 
 /* Cleanup cfg and repair loop structures.  */