flow.c (find_unreachable_blocks): New function.
authorJeffrey A Law <law@cygnus.com>
Mon, 18 Jun 2001 19:46:37 +0000 (19:46 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 18 Jun 2001 19:46:37 +0000 (13:46 -0600)
* flow.c (find_unreachable_blocks): New function.
(delete_unreachable_blocks): Use find_unreachable_blocks.
* basic-block.h (find_unreachable_blocks): Declare.

From-SVN: r43448

gcc/ChangeLog
gcc/basic-block.h
gcc/flow.c

index 92e79c1a9fd509ff3a882a1066e5f45d08a1c905..13daeb5c49387e68e6e9a6f00015c99592baf4bd 100644 (file)
@@ -1,5 +1,9 @@
 Mon Jun 18 12:50:49 2001  Jeffrey A Law  (law@cygnus.com)
 
+       * flow.c (find_unreachable_blocks): New function.
+       (delete_unreachable_blocks): Use find_unreachable_blocks.
+       * basic-block.h (find_unreachable_blocks): Declare.
+
         * dce.c (eliminate_dead_code): Fix formatting glitch.
 
 2001-06-18  Jason Merrill  <jason_merrill@redhat.com>
index c5e30d968057e3cd7e1943dbdfb77853f9479c80..8d63cefd694d73d2f5d8213eba3ad64847f3af8f 100644 (file)
@@ -555,6 +555,7 @@ extern void debug_bb_n                      PARAMS ((int));
 extern void dump_regset                        PARAMS ((regset, FILE *));
 extern void debug_regset               PARAMS ((regset));
 extern void allocate_reg_life_data      PARAMS ((void));
+extern void find_unreachable_blocks    PARAMS ((void));
 
 /* This function is always defined so it can be called from the
    debugger, and it is declared extern so we don't get warnings about
index 77783aa9696a02d6b37038403136be8d9ae7cd65..43ed9cc03ffdf93838dbce710a69859fb6c18d9e 100644 (file)
@@ -2055,14 +2055,15 @@ flow_call_edges_add (blocks)
   return blocks_split;
 }
 \f
-/* Delete all unreachable basic blocks.   */
+/* Find unreachable blocks.  An unreachable block will have NULL in
+   block->aux, a non-NULL value indicates the block is reachable.  */
 
-static void
-delete_unreachable_blocks ()
+void
+find_unreachable_blocks ()
 {
-  basic_block *worklist, *tos;
   edge e;
   int i, n;
+  basic_block *tos, *worklist;
 
   n = n_basic_blocks;
   tos = worklist = (basic_block *) xmalloc (sizeof (basic_block) * n);
@@ -2098,11 +2099,20 @@ delete_unreachable_blocks ()
          }
     }
 
+  free (worklist);
+}
+
+/* Delete all unreachable basic blocks.   */
+static void
+delete_unreachable_blocks ()
+{
+  int i;
+
   /* Delete all unreachable basic blocks.  Count down so that we
      don't interfere with the block renumbering that happens in
      flow_delete_block.  */
 
-  for (i = n - 1; i >= 0; --i)
+  for (i = n_basic_blocks - 1; i >= 0; --i)
     {
       basic_block b = BASIC_BLOCK (i);
 
@@ -2114,8 +2124,6 @@ delete_unreachable_blocks ()
     }
 
   tidy_fallthru_edges ();
-
-  free (worklist);
 }
 
 /* Return true if NOTE is not one of the ones that must be kept paired,