+2004-11-25 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-phinodes.c (add_phi_arg): Take "tree" instead of
+ "tree *" as the first argument.
+ * tree-flow.h: Update the prototype of add_phi_arg.
+ * lambda-code.c, tree-cfg.c, tree-into-ssa.c,
+ tree-ssa-loop-ivopts.c, tree-ssa-loop-manip.c, tree-ssa-pre.c,
+ tree-ssa-threadupdate.c, tree-ssa.c, tree-tailcall.c,
+ tree-vectorizer.c: Update all call sites of add_phi_arg.
+
2004-11-25 Nathan Sidwell <nathan@codesourcery.com>
* bitmap.c (bitmap_malloc_alloc, bitmap_malloc_free): Remove.
def = VEC_pop (tree, phis);
phiname = VEC_pop (tree, phis);
phi = create_phi_node (phiname, preheaderbb);
- add_phi_arg (&phi, def, EDGE_PRED (preheaderbb, 0));
+ add_phi_arg (phi, def, EDGE_PRED (preheaderbb, 0));
}
flush_pending_stmts (e);
unmark_all_for_rewrite ();
gcc_assert (result == PHI_RESULT (phi));
- add_phi_arg (&phi, arg, new_edge);
+ add_phi_arg (phi, arg, new_edge);
}
PENDING_STMT (old_edge) = NULL;
new_phi = create_phi_node (var, bb);
SSA_NAME_DEF_STMT (var) = new_phi;
SET_PHI_RESULT (phi, make_ssa_name (SSA_NAME_VAR (var), phi));
- add_phi_arg (&new_phi, PHI_RESULT (phi), fallthru);
+ add_phi_arg (new_phi, PHI_RESULT (phi), fallthru);
}
/* Ensure that the PHI node chain is in the same order. */
{
arg = phi_arg_from_edge (phi, last);
gcc_assert (arg >= 0);
- add_phi_arg (&phi, PHI_ARG_DEF (phi, arg), e);
+ add_phi_arg (phi, PHI_ARG_DEF (phi, arg), e);
}
}
gcc_assert (PHI_RESULT (phi) == PHI_RESULT (phi_copy));
def = PHI_ARG_DEF_FROM_EDGE (phi, e);
- add_phi_arg (&phi_copy, def, e_copy);
+ add_phi_arg (phi_copy, def, e_copy);
}
}
}
tree name = ssa_name (ver);
phi = create_phi_node (name, exit->dest);
- add_phi_arg (&phi, name, exit);
- add_phi_arg (&phi, name, exit_copy);
+ add_phi_arg (phi, name, exit);
+ add_phi_arg (phi, name, exit_copy);
SSA_NAME_DEF_STMT (name) = phi;
}
extern tree_ann_t create_tree_ann (tree);
extern void reserve_phi_args_for_new_edge (basic_block);
extern tree create_phi_node (tree, basic_block);
-extern void add_phi_arg (tree *, tree, edge);
+extern void add_phi_arg (tree, tree, edge);
extern void remove_phi_args (edge);
extern void remove_phi_node (tree, tree, basic_block);
extern void remove_all_phi_nodes_for (bitmap);
break;
currdef = get_reaching_def (SSA_NAME_VAR (PHI_RESULT (phi)));
- add_phi_arg (&phi, currdef, e);
+ add_phi_arg (phi, currdef, e);
}
}
}
{
edge_iterator ei;
FOR_EACH_EDGE (e, ei, bb->preds)
- add_phi_arg (&phi, var, e);
+ add_phi_arg (phi, var, e);
}
}
PHI points to the reallocated phi node when we return. */
void
-add_phi_arg (tree *phi, tree def, edge e)
+add_phi_arg (tree phi, tree def, edge e)
{
basic_block bb = e->dest;
- gcc_assert (bb == bb_for_stmt (*phi));
+ gcc_assert (bb == bb_for_stmt (phi));
/* We resize PHI nodes upon edge creation. We should always have
enough room at this point. */
- gcc_assert (PHI_NUM_ARGS (*phi) <= PHI_ARG_CAPACITY (*phi));
+ gcc_assert (PHI_NUM_ARGS (phi) <= PHI_ARG_CAPACITY (phi));
/* We resize PHI nodes upon edge creation. We should always have
enough room at this point. */
- gcc_assert (e->dest_idx < (unsigned int) PHI_NUM_ARGS (*phi));
+ gcc_assert (e->dest_idx < (unsigned int) PHI_NUM_ARGS (phi));
/* Copy propagation needs to know what object occur in abnormal
PHI nodes. This is a convenient place to record such information. */
if (e->flags & EDGE_ABNORMAL)
{
SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def) = 1;
- SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (*phi)) = 1;
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (phi)) = 1;
}
- SET_PHI_ARG_DEF (*phi, e->dest_idx, def);
- PHI_ARG_NONZERO (*phi, e->dest_idx) = false;
+ SET_PHI_ARG_DEF (phi, e->dest_idx, def);
+ PHI_ARG_NONZERO (phi, e->dest_idx) = false;
}
/* Remove the Ith argument from PHI's argument list. This routine assumes
phi = create_phi_node (new_name, exit->dest);
SSA_NAME_DEF_STMT (new_name) = phi;
- add_phi_arg (&phi, use, exit);
+ add_phi_arg (phi, use, exit);
}
SET_USE (op_p, PHI_RESULT (phi));
stmt = create_phi_node (vb, loop->header);
SSA_NAME_DEF_STMT (vb) = stmt;
- add_phi_arg (&stmt, initial, loop_preheader_edge (loop));
- add_phi_arg (&stmt, va, loop_latch_edge (loop));
+ add_phi_arg (stmt, initial, loop_preheader_edge (loop));
+ add_phi_arg (stmt, va, loop_latch_edge (loop));
}
/* Add exit phis for the USE on EXIT. */
phi = create_phi_node (use, exit);
FOR_EACH_EDGE (e, ei, exit->preds)
- add_phi_arg (&phi, use, e);
+ add_phi_arg (phi, use, e);
SSA_NAME_DEF_STMT (use) = def_stmt;
}
new_name = duplicate_ssa_name (name, NULL);
new_phi = create_phi_node (new_name, bb);
SSA_NAME_DEF_STMT (new_name) = new_phi;
- add_phi_arg (&new_phi, name, exit);
+ add_phi_arg (new_phi, name, exit);
SET_USE (op_p, new_name);
}
}
if (e2)
{
tree def = PHI_ARG_DEF (phi2, e2->dest_idx);
- add_phi_arg (&phi1, def, e);
+ add_phi_arg (phi1, def, e);
}
}
}
PHI_RESULT (temp));
FOR_EACH_EDGE (pred, ei, block->preds)
{
- add_phi_arg (&temp, avail[pred->src->index],
+ add_phi_arg (temp, avail[pred->src->index],
pred);
}
if (dump_file && (dump_flags & TDF_DETAILS))
for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
{
int indx = phi_arg_from_edge (phi, rd->outgoing_edge);
- add_phi_arg (&phi, PHI_ARG_DEF_TREE (phi, indx), e);
+ add_phi_arg (phi, PHI_ARG_DEF_TREE (phi, indx), e);
}
}
phi = PHI_CHAIN (phi), arg = TREE_CHAIN (arg))
{
tree def = TREE_VALUE (arg);
- add_phi_arg (&phi, def, e);
+ add_phi_arg (phi, def, e);
}
PENDING_STMT (e) = NULL;
if (PHI_RESULT (phi) == a_acc)
break;
- add_phi_arg (&phi, a_acc_arg, back);
+ add_phi_arg (phi, a_acc_arg, back);
}
if (m_acc)
if (PHI_RESULT (phi) == m_acc)
break;
- add_phi_arg (&phi, m_acc_arg, back);
+ add_phi_arg (phi, m_acc_arg, back);
}
}
if (!phi)
continue;
- add_phi_arg (&phi, TREE_VALUE (args), e);
+ add_phi_arg (phi, TREE_VALUE (args), e);
}
/* Add phi nodes for the call clobbered variables. */
var_ann (param)->default_def = new_name;
phi = create_phi_node (name, first);
SSA_NAME_DEF_STMT (name) = phi;
- add_phi_arg (&phi, new_name, EDGE_SUCC (ENTRY_BLOCK_PTR, 0));
+ add_phi_arg (phi, new_name, EDGE_SUCC (ENTRY_BLOCK_PTR, 0));
/* For all calls the same set of variables should be clobbered. This
means that there always should be the appropriate phi node except
gcc_assert (EDGE_COUNT (first->preds) <= 2);
}
- add_phi_arg (&phi, V_MAY_DEF_OP (v_may_defs, i), e);
+ add_phi_arg (phi, V_MAY_DEF_OP (v_may_defs, i), e);
}
/* Update the values of accumulators. */
var_ann (param)->default_def = new_name;
phi = create_phi_node (name, first);
SSA_NAME_DEF_STMT (name) = phi;
- add_phi_arg (&phi, new_name, EDGE_PRED (first, 0));
+ add_phi_arg (phi, new_name, EDGE_PRED (first, 0));
}
phis_constructed = true;
}
add_referenced_tmp_var (tmp);
phi = create_phi_node (tmp, first);
- add_phi_arg (&phi,
+ add_phi_arg (phi,
/* RET_TYPE can be a float when -ffast-maths is
enabled. */
fold_convert (ret_type, integer_zero_node),
add_referenced_tmp_var (tmp);
phi = create_phi_node (tmp, first);
- add_phi_arg (&phi,
+ add_phi_arg (phi,
/* RET_TYPE can be a float when -ffast-maths is
enabled. */
fold_convert (ret_type, integer_one_node),
{
/* step 1. */
def = PHI_ARG_DEF_FROM_EDGE (phi_orig, entry_arg_e);
- add_phi_arg (&phi_new, def, new_loop_entry_e);
+ add_phi_arg (phi_new, def, new_loop_entry_e);
/* step 2. */
def = PHI_ARG_DEF_FROM_EDGE (phi_orig, orig_loop_latch);
/* An ordinary ssa name defined in the loop. */
new_ssa_name = *new_name_ptr;
- add_phi_arg (&phi_new, new_ssa_name, loop_latch_edge (new_loop));
+ add_phi_arg (phi_new, new_ssa_name, loop_latch_edge (new_loop));
/* step 3 (case 1). */
if (!after)
loop_arg = orig_def;
}
}
- add_phi_arg (&new_phi, loop_arg, loop->exit_edges[0]);
- add_phi_arg (&new_phi, guard_arg, guard_edge);
+ add_phi_arg (new_phi, loop_arg, loop->exit_edges[0]);
+ add_phi_arg (new_phi, guard_arg, guard_edge);
/* 3. Update phi in successor block. */
gcc_assert (PHI_ARG_DEF_FROM_EDGE (update_phi, e) == loop_arg
else
new_loop_exit_edge = EDGE_SUCC (new_loop->header, 0);
- add_phi_arg (&phi, phi_arg, new_loop_exit_edge);
+ add_phi_arg (phi, phi_arg, new_loop_exit_edge);
}
}
{
phi_arg = PHI_ARG_DEF_FROM_EDGE (phi, entry_e);
if (phi_arg)
- add_phi_arg (&phi, phi_arg, new_exit_e);
+ add_phi_arg (phi, phi_arg, new_exit_e);
}
redirect_edge_and_branch_force (entry_e, new_loop->header);
msq = make_ssa_name (vec_dest, NULL_TREE);
phi_stmt = create_phi_node (msq, loop->header); /* CHECKME */
SSA_NAME_DEF_STMT (msq) = phi_stmt;
- add_phi_arg (&phi_stmt, msq_init, loop_preheader_edge (loop));
- add_phi_arg (&phi_stmt, lsq, loop_latch_edge (loop));
+ add_phi_arg (phi_stmt, msq_init, loop_preheader_edge (loop));
+ add_phi_arg (phi_stmt, lsq, loop_latch_edge (loop));
/* <5> Create <vec_dest = realign_load (msq, lsq, magic)> in loop */