From 585d0dc43c1323a1b1fde9de6f6ee95dfc065ff2 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 8 Oct 2012 11:55:13 +0000 Subject: [PATCH] tree-ssa-pre.c (postorder_num): New global. 2012-10-08 Richard Guenther * 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 | 8 +++++ gcc/tree-ssa-pre.c | 86 ++++------------------------------------------ 2 files changed, 14 insertions(+), 80 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a9f6c47910b..f1e815e3f0b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-10-08 Richard Guenther + + * 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 * sched-int.h (schedule_block): Adjust declaration. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 8dbbed236c7..5feed3b5153 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -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));