tree-ssa-pre.c (postorder_num): New global.
authorRichard Guenther <rguenther@suse.de>
Mon, 8 Oct 2012 11:55:13 +0000 (11:55 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 8 Oct 2012 11:55:13 +0000 (11:55 +0000)
2012-10-08  Richard Guenther  <rguenther@suse.de>

* tree-ssa-pre.c (postorder_num): New global.
(compute_antic): Initialize all blocks and adjust for
generic postorder.
(my_rev_post_order_compute): Remove.
(init_pre): Use inverted_post_order_compute.

From-SVN: r192204

gcc/ChangeLog
gcc/tree-ssa-pre.c

index a9f6c47..f1e815e 100644 (file)
@@ -1,3 +1,11 @@
+2012-10-08  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-pre.c (postorder_num): New global.
+       (compute_antic): Initialize all blocks and adjust for
+       generic postorder.
+       (my_rev_post_order_compute): Remove.
+       (init_pre): Use inverted_post_order_compute.
+
 2012-10-08  Bernd Schmidt  <bernds@codesourcery.com>
 
        * sched-int.h (schedule_block): Adjust declaration.
index 8dbbed2..5feed3b 100644 (file)
@@ -430,6 +430,7 @@ typedef struct bb_bitmap_sets
 
 /* Basic block list in postorder.  */
 static int *postorder;
+static int postorder_num;
 
 /* This structure is used to keep track of statistics on what
    optimization PRE was able to perform.  */
@@ -2456,7 +2457,7 @@ compute_antic (void)
   has_abnormal_preds = sbitmap_alloc (last_basic_block);
   sbitmap_zero (has_abnormal_preds);
 
-  FOR_EACH_BB (block)
+  FOR_ALL_BB (block)
     {
       edge_iterator ei;
       edge e;
@@ -2480,9 +2481,7 @@ compute_antic (void)
     }
 
   /* At the exit block we anticipate nothing.  */
-  ANTIC_IN (EXIT_BLOCK_PTR) = bitmap_set_new ();
   BB_VISITED (EXIT_BLOCK_PTR) = 1;
-  PA_IN (EXIT_BLOCK_PTR) = bitmap_set_new ();
 
   changed_blocks = sbitmap_alloc (last_basic_block + 1);
   sbitmap_ones (changed_blocks);
@@ -2496,7 +2495,7 @@ compute_antic (void)
         for PA ANTIC computation.  */
       num_iterations++;
       changed = false;
-      for (i = n_basic_blocks - NUM_FIXED_BLOCKS - 1; i >= 0; i--)
+      for (i = postorder_num - 1; i >= 0; i--)
        {
          if (TEST_BIT (changed_blocks, postorder[i]))
            {
@@ -2525,7 +2524,7 @@ compute_antic (void)
            fprintf (dump_file, "Starting iteration %d\n", num_iterations);
          num_iterations++;
          changed = false;
-         for (i = n_basic_blocks - NUM_FIXED_BLOCKS - 1 ; i >= 0; i--)
+         for (i = postorder_num - 1 ; i >= 0; i--)
            {
              if (TEST_BIT (changed_blocks, postorder[i]))
                {
@@ -4593,78 +4592,6 @@ remove_dead_inserted_code (void)
   BITMAP_FREE (worklist);
 }
 
-/* Compute a reverse post-order in *POST_ORDER.  If INCLUDE_ENTRY_EXIT is
-   true, then then ENTRY_BLOCK and EXIT_BLOCK are included.  Returns
-   the number of visited blocks.  */
-
-static int
-my_rev_post_order_compute (int *post_order, bool include_entry_exit)
-{
-  edge_iterator *stack;
-  int sp;
-  int post_order_num = 0;
-  sbitmap visited;
-
-  if (include_entry_exit)
-    post_order[post_order_num++] = EXIT_BLOCK;
-
-  /* Allocate stack for back-tracking up CFG.  */
-  stack = XNEWVEC (edge_iterator, n_basic_blocks + 1);
-  sp = 0;
-
-  /* Allocate bitmap to track nodes that have been visited.  */
-  visited = sbitmap_alloc (last_basic_block);
-
-  /* None of the nodes in the CFG have been visited yet.  */
-  sbitmap_zero (visited);
-
-  /* Push the last edge on to the stack.  */
-  stack[sp++] = ei_start (EXIT_BLOCK_PTR->preds);
-
-  while (sp)
-    {
-      edge_iterator ei;
-      basic_block src;
-      basic_block dest;
-
-      /* Look at the edge on the top of the stack.  */
-      ei = stack[sp - 1];
-      src = ei_edge (ei)->src;
-      dest = ei_edge (ei)->dest;
-
-      /* Check if the edge source has been visited yet.  */
-      if (src != ENTRY_BLOCK_PTR && ! TEST_BIT (visited, src->index))
-        {
-          /* Mark that we have visited the destination.  */
-          SET_BIT (visited, src->index);
-
-          if (EDGE_COUNT (src->preds) > 0)
-            /* Since the SRC node has been visited for the first
-               time, check its predecessors.  */
-            stack[sp++] = ei_start (src->preds);
-          else
-            post_order[post_order_num++] = src->index;
-        }
-      else
-        {
-          if (ei_one_before_end_p (ei) && dest != EXIT_BLOCK_PTR)
-            post_order[post_order_num++] = dest->index;
-
-          if (!ei_one_before_end_p (ei))
-            ei_next (&stack[sp - 1]);
-          else
-            sp--;
-        }
-    }
-
-  if (include_entry_exit)
-    post_order[post_order_num++] = ENTRY_BLOCK;
-
-  free (stack);
-  sbitmap_free (visited);
-  return post_order_num;
-}
-
 
 /* Initialize data structures used by PRE.  */
 
@@ -4686,9 +4613,8 @@ init_pre (void)
   connect_infinite_loops_to_exit ();
   memset (&pre_stats, 0, sizeof (pre_stats));
 
-
-  postorder = XNEWVEC (int, n_basic_blocks - NUM_FIXED_BLOCKS);
-  my_rev_post_order_compute (postorder, false);
+  postorder = XNEWVEC (int, n_basic_blocks);
+  postorder_num = inverted_post_order_compute (postorder);
 
   alloc_aux_for_blocks (sizeof (struct bb_bitmap_sets));