PR tree-opt/18507
* tree-flow.h (tree2): Typedef because there is already a VEC(tree).
Define a VEC(tree2) for head.
(register_new_def): Change second argument to be a VEC(tree2).
* tree-ssa-dom.c (block_defs_stack): Change to be a VEC(tree2).
(tree_ssa_dominator_optimize): Initialize block_defs_stack with
the VEC(tree2) function. Also free it before returning.
(dom_opt_initialize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
for block_defs_stack.
(restore_currdefs_to_original_value): Use VEC_length instead of
VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
(dom_opt_finalize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
for block_defs_stack.
* tree-into-ssa.c (block_defs_stack): Change to be a VEC(tree2).
(rewrite_initialize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
for block_defs_stack.
(ssa_register_new_def): Likewise.
(ssa_rewrite_initialize_block): Likewise.
(rewrite_finalize_block): Use VEC_length instead of
VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
(ssa_rewrite_finalize_block): Likewise.
(register_new_def): Change second argument to be a VEC(tree2).
Use VEC_safe_push instead of VARRAY_PUSH_TREE.
(rewrite_blocks): Initialize block_defs_stack with
the VEC(tree2) function. Also free it before returning.
(rewrite_ssa_into_ssa): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@90926
138bc75d-0d04-0410-961f-
82ee72b054a4
-2004-11-18 Fariborz Jahanian <fjahanian@apple.com>
+2004-11-19 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR tree-opt/18507
+ * tree-flow.h (tree2): Typedef because there is already a VEC(tree).
+ Define a VEC(tree2) for head.
+ (register_new_def): Change second argument to be a VEC(tree2).
+ * tree-ssa-dom.c (block_defs_stack): Change to be a VEC(tree2).
+ (tree_ssa_dominator_optimize): Initialize block_defs_stack with
+ the VEC(tree2) function. Also free it before returning.
+ (dom_opt_initialize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
+ for block_defs_stack.
+ (restore_currdefs_to_original_value): Use VEC_length instead of
+ VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
+ (dom_opt_finalize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
+ for block_defs_stack.
+ * tree-into-ssa.c (block_defs_stack): Change to be a VEC(tree2).
+ (rewrite_initialize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
+ for block_defs_stack.
+ (ssa_register_new_def): Likewise.
+ (ssa_rewrite_initialize_block): Likewise.
+ (rewrite_finalize_block): Use VEC_length instead of
+ VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
+ (ssa_rewrite_finalize_block): Likewise.
+ (register_new_def): Change second argument to be a VEC(tree2).
+ Use VEC_safe_push instead of VARRAY_PUSH_TREE.
+ (rewrite_blocks): Initialize block_defs_stack with
+ the VEC(tree2) function. Also free it before returning.
+ (rewrite_ssa_into_ssa): Likewise.
+
+2004-11-19 Fariborz Jahanian <fjahanian@apple.com>
* config/darwin.c (machopic_data_defined_p): return 1 for
MACHOPIC_DEFINED_FUNCTION.
definition, a function with this prototype is called. */
typedef bool (*walk_use_def_chains_fn) (tree, tree, void *);
+typedef tree tree_on_heap;
+DEF_VEC_MALLOC_P (tree_on_heap);
+
/* In tree-ssa.c */
extern void init_tree_ssa (void);
extern void debug_reaching_defs (void);
extern bool tree_ssa_useless_type_conversion_1 (tree, tree);
extern void verify_ssa (void);
extern void delete_tree_ssa (void);
-extern void register_new_def (tree, varray_type *);
+extern void register_new_def (tree, VEC (tree_on_heap) **);
extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool);
extern void kill_redundant_phi_nodes (void);
extern bool stmt_references_memory_p (tree);
A NULL node at the top entry is used to mark the last node associated
with the current block. */
-static varray_type block_defs_stack;
+static VEC(tree_on_heap) *block_defs_stack;
+
+/* FIXME: The other stacks should also be VEC(tree_on_heap). */
/* Global data to attach to the main dominator walk structure. */
struct mark_def_sites_global_data
fprintf (dump_file, "\n\nRenaming block #%d\n\n", bb->index);
/* Mark the unwind point for this block. */
- VARRAY_PUSH_TREE (block_defs_stack, NULL_TREE);
+ VEC_safe_push (tree_on_heap, block_defs_stack, NULL_TREE);
/* Step 1. Register new definitions for every PHI node in the block.
Conceptually, all the PHI nodes are executed in parallel and each PHI
later used by the dominator tree callbacks to restore the reaching
definitions for all the variables defined in the block after a recursive
visit to all its immediately dominated blocks. */
- VARRAY_PUSH_TREE (block_defs_stack, currdef);
- VARRAY_PUSH_TREE (block_defs_stack, var);
+ VEC_safe_push (tree_on_heap, block_defs_stack, currdef);
+ VEC_safe_push (tree_on_heap, block_defs_stack, var);
/* Set the current reaching definition for VAR to be DEF. */
set_current_def (var, def);
fprintf (dump_file, "\n\nRenaming block #%d\n\n", bb->index);
/* Mark the unwind point for this block. */
- VARRAY_PUSH_TREE (block_defs_stack, NULL_TREE);
+ VEC_safe_push (tree_on_heap, block_defs_stack, NULL_TREE);
FOR_EACH_EDGE (e, ei, bb->preds)
if (e->flags & EDGE_ABNORMAL)
basic_block bb ATTRIBUTE_UNUSED)
{
/* Restore CURRDEFS to its original state. */
- while (VARRAY_ACTIVE_SIZE (block_defs_stack) > 0)
+ while (VEC_length (tree_on_heap, block_defs_stack) > 0)
{
- tree tmp = VARRAY_TOP_TREE (block_defs_stack);
+ tree tmp = VEC_pop (tree_on_heap, block_defs_stack);
tree saved_def, var;
- VARRAY_POP (block_defs_stack);
-
if (tmp == NULL_TREE)
break;
/* Step 5. Restore the current reaching definition for each variable
referenced in the block (in reverse order). */
- while (VARRAY_ACTIVE_SIZE (block_defs_stack) > 0)
+ while (VEC_length (tree_on_heap, block_defs_stack) > 0)
{
- tree var = VARRAY_TOP_TREE (block_defs_stack);
+ tree var = VEC_pop (tree_on_heap, block_defs_stack);
tree saved_def;
-
- VARRAY_POP (block_defs_stack);
if (var == NULL)
break;
- saved_def = VARRAY_TOP_TREE (block_defs_stack);
- VARRAY_POP (block_defs_stack);
+ saved_def = VEC_pop (tree_on_heap, block_defs_stack);
set_current_def (var, saved_def);
}
into the stack pointed by BLOCK_DEFS_P. */
void
-register_new_def (tree def, varray_type *block_defs_p)
+register_new_def (tree def, VEC (tree_on_heap) **block_defs_p)
{
tree var = SSA_NAME_VAR (def);
tree currdef;
definitions for all the variables defined in the block after a recursive
visit to all its immediately dominated blocks. If there is no current
reaching definition, then just record the underlying _DECL node. */
- VARRAY_PUSH_TREE (*block_defs_p, currdef ? currdef : var);
+ VEC_safe_push (tree_on_heap, *block_defs_p, currdef ? currdef : var);
/* Set the current reaching definition for VAR to be DEF. */
set_current_def (var, def);
walk_data.global_data = NULL;
walk_data.block_local_data_size = 0;
- VARRAY_TREE_INIT (block_defs_stack, 10, "Block DEFS Stack");
+ block_defs_stack = VEC_alloc (tree_on_heap, 10);
/* Initialize the dominator walker. */
init_walk_dominator_tree (&walk_data);
fini_walk_dominator_tree (&walk_data);
htab_delete (def_blocks);
+
+ VEC_free (tree_on_heap, block_defs_stack);
+ block_defs_stack = NULL;
timevar_pop (TV_TREE_SSA_REWRITE_BLOCKS);
}
mark_def_sites_global_data.names_to_rename = snames_to_rename;
walk_data.global_data = &mark_def_sites_global_data;
- VARRAY_TREE_INIT (block_defs_stack, 10, "Block DEFS Stack");
+ block_defs_stack = VEC_alloc (tree_on_heap, 10);
/* We do not have any local data. */
walk_data.block_local_data_size = 0;
}
BITMAP_XFREE (to_rename);
+
+ VEC_free (tree_on_heap, block_defs_stack);
+ block_defs_stack = NULL;
timevar_pop (TV_TREE_SSA_OTHER);
}
A NULL node is used to mark the last node associated with the
current block. */
-varray_type block_defs_stack;
+VEC(tree_on_heap) *block_defs_stack;
+
+/* FIXME: The other stacks should also be VEC(tree_on_heap). */
/* Stack of statements we need to rescan during finalization for newly
exposed variables.
avail_exprs = htab_create (1024, real_avail_expr_hash, avail_expr_eq, free);
vrp_data = htab_create (ceil_log2 (num_ssa_names), vrp_hash, vrp_eq, free);
VARRAY_TREE_INIT (avail_exprs_stack, 20, "Available expression stack");
- VARRAY_TREE_INIT (block_defs_stack, 20, "Block DEFS stack");
+ block_defs_stack = VEC_alloc (tree_on_heap, 20);
VARRAY_TREE_INIT (const_and_copies_stack, 20, "Block const_and_copies stack");
VARRAY_TREE_INIT (nonzero_vars_stack, 20, "Block nonzero_vars stack");
VARRAY_TREE_INIT (vrp_variables_stack, 20, "Block vrp_variables stack");
if (value && !is_gimple_min_invariant (value))
SSA_NAME_VALUE (name) = NULL;
}
+
+ VEC_free (tree_on_heap, block_defs_stack);
+ block_defs_stack = NULL;
}
static bool
/* Push a marker on the stacks of local information so that we know how
far to unwind when we finalize this block. */
VARRAY_PUSH_TREE (avail_exprs_stack, NULL_TREE);
- VARRAY_PUSH_TREE (block_defs_stack, NULL_TREE);
+ VEC_safe_push (tree_on_heap, block_defs_stack, NULL_TREE);
VARRAY_PUSH_TREE (const_and_copies_stack, NULL_TREE);
VARRAY_PUSH_TREE (nonzero_vars_stack, NULL_TREE);
VARRAY_PUSH_TREE (vrp_variables_stack, NULL_TREE);
restore_currdefs_to_original_value (void)
{
/* Restore CURRDEFS to its original state. */
- while (VARRAY_ACTIVE_SIZE (block_defs_stack) > 0)
+ while (VEC_length (tree_on_heap, block_defs_stack) > 0)
{
- tree tmp = VARRAY_TOP_TREE (block_defs_stack);
+ tree tmp = VEC_pop (tree_on_heap, block_defs_stack);
tree saved_def, var;
- VARRAY_POP (block_defs_stack);
-
if (tmp == NULL_TREE)
break;
unwind any expressions related to the TRUE arm before processing
the false arm below. */
VARRAY_PUSH_TREE (avail_exprs_stack, NULL_TREE);
- VARRAY_PUSH_TREE (block_defs_stack, NULL_TREE);
+ VEC_safe_push (tree_on_heap, block_defs_stack, NULL_TREE);
VARRAY_PUSH_TREE (const_and_copies_stack, NULL_TREE);
edge_info = true_edge->aux;