From 78492bf5ac71894df6c63fe5eb69c65007d52ad0 Mon Sep 17 00:00:00 2001 From: Steven Bosscher Date: Tue, 28 Sep 2004 20:31:16 +0000 Subject: [PATCH] Makefile.in (tree-ssa-propagate.o): Depend on vec.h. * Makefile.in (tree-ssa-propagate.o): Depend on vec.h. * tree-ssa-propagate.c: Include vec.h. (interesting_ssa_edges, varying_ssa_edges): Make these VECs instead of varrays. (cfg_blocks_add): Assert the block is not already in the worklist. Update uses of interesting_ssa_edges and varying_ssa_edges. (process_ssa_edge_worklist, ssa_prop_init, ssa_prop_fini, ssa_propagate): Likewise. From-SVN: r88249 --- gcc/ChangeLog | 11 +++++++++++ gcc/Makefile.in | 2 +- gcc/tree-ssa-propagate.c | 40 +++++++++++++++++++++------------------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2847a26..11506d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2004-09-28 Steven Bosscher + + * Makefile.in (tree-ssa-propagate.o): Depend on vec.h. + * tree-ssa-propagate.c: Include vec.h. + (interesting_ssa_edges, varying_ssa_edges): Make these VECs + instead of varrays. + (cfg_blocks_add): Assert the block is not already in the worklist. + Update uses of interesting_ssa_edges and varying_ssa_edges. + (process_ssa_edge_worklist, ssa_prop_init, ssa_prop_fini, + ssa_propagate): Likewise. + 2004-09-28 Joseph S. Myers PR c/16409 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index f890579..ec4af54 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1635,7 +1635,7 @@ tree-ssa-propagate.o : tree-ssa-propagate.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \ diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \ $(TREE_DUMP_H) $(BASIC_BLOCK_H) tree-pass.h langhooks.h \ - tree-ssa-propagate.h + tree-ssa-propagate.h vec.h tree-ssa-dom.o : tree-ssa-dom.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h diagnostic.h \ errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \ diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c index e93b9c1..6fab4f4 100644 --- a/gcc/tree-ssa-propagate.c +++ b/gcc/tree-ssa-propagate.c @@ -40,7 +40,8 @@ #include "tree-pass.h" #include "tree-ssa-propagate.h" #include "langhooks.h" - +#include "varray.h" +#include "vec.h" /* This file implements a generic value propagation engine based on the same propagation used by the SSA-CCP algorithm [1]. @@ -142,7 +143,7 @@ static sbitmap bb_in_list; definition has changed. SSA edges are def-use edges in the SSA web. For each D-U edge, we store the target statement or PHI node U. */ -static GTY(()) varray_type interesting_ssa_edges; +static GTY(()) VEC(tree) *interesting_ssa_edges; /* Identical to INTERESTING_SSA_EDGES. For performance reasons, the list of SSA edges is split into two. One contains all SSA edges @@ -158,7 +159,7 @@ static GTY(()) varray_type interesting_ssa_edges; don't use a separate worklist for VARYING edges, we end up with situations where lattice values move from UNDEFINED->INTERESTING->VARYING instead of UNDEFINED->VARYING. */ -static GTY(()) varray_type varying_ssa_edges; +static GTY(()) VEC(tree) *varying_ssa_edges; /* Return true if the block worklist empty. */ @@ -170,7 +171,8 @@ cfg_blocks_empty_p (void) } -/* Add a basic block to the worklist. */ +/* Add a basic block to the worklist. The block must not be already + in the worklist. */ static void cfg_blocks_add (basic_block bb) @@ -178,8 +180,7 @@ cfg_blocks_add (basic_block bb) if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR) return; - if (TEST_BIT (bb_in_list, bb->index)) - return; + gcc_assert (!TEST_BIT (bb_in_list, bb->index)); if (cfg_blocks_empty_p ()) { @@ -247,9 +248,9 @@ add_ssa_edge (tree var, bool is_varying) { STMT_IN_SSA_EDGE_WORKLIST (use_stmt) = 1; if (is_varying) - VARRAY_PUSH_TREE (varying_ssa_edges, use_stmt); + VEC_safe_push (tree, varying_ssa_edges, use_stmt); else - VARRAY_PUSH_TREE (interesting_ssa_edges, use_stmt); + VEC_safe_push (tree, interesting_ssa_edges, use_stmt); } } } @@ -340,19 +341,20 @@ simulate_stmt (tree stmt) /* Process an SSA edge worklist. WORKLIST is the SSA edge worklist to drain. This pops statements off the given WORKLIST and processes - them until there are no more statements on WORKLIST. */ + them until there are no more statements on WORKLIST. + We take a pointer to WORKLIST because it may be reallocated when an + SSA edge is added to it in simulate_stmt. */ static void -process_ssa_edge_worklist (varray_type *worklist) +process_ssa_edge_worklist (VEC(tree) **worklist) { /* Drain the entire worklist. */ - while (VARRAY_ACTIVE_SIZE (*worklist) > 0) + while (VEC_length (tree, *worklist) > 0) { basic_block bb; /* Pull the statement to simulate off the worklist. */ - tree stmt = VARRAY_TOP_TREE (*worklist); - VARRAY_POP (*worklist); + tree stmt = VEC_pop (tree, *worklist); /* If this statement was already visited by simulate_block, then we don't need to visit it again here. */ @@ -463,8 +465,8 @@ ssa_prop_init (void) basic_block bb; /* Worklists of SSA edges. */ - VARRAY_TREE_INIT (interesting_ssa_edges, 20, "interesting_ssa_edges"); - VARRAY_TREE_INIT (varying_ssa_edges, 20, "varying_ssa_edges"); + interesting_ssa_edges = VEC_alloc (tree, 20); + varying_ssa_edges = VEC_alloc (tree, 20); executable_blocks = sbitmap_alloc (last_basic_block); sbitmap_zero (executable_blocks); @@ -507,8 +509,8 @@ ssa_prop_init (void) static void ssa_prop_fini (void) { - interesting_ssa_edges = NULL; - varying_ssa_edges = NULL; + VEC_free (tree, interesting_ssa_edges); + VEC_free (tree, varying_ssa_edges); cfg_blocks = NULL; sbitmap_free (bb_in_list); sbitmap_free (executable_blocks); @@ -653,8 +655,8 @@ ssa_propagate (ssa_prop_visit_stmt_fn visit_stmt, /* Iterate until the worklists are empty. */ while (!cfg_blocks_empty_p () - || VARRAY_ACTIVE_SIZE (interesting_ssa_edges) > 0 - || VARRAY_ACTIVE_SIZE (varying_ssa_edges) > 0) + || VEC_length (tree, interesting_ssa_edges) > 0 + || VEC_length (tree, varying_ssa_edges) > 0) { if (!cfg_blocks_empty_p ()) { -- 2.7.4