tree-flow.h (register_new_name_mapping): Remove.

2012-08-20  Richard Guenther  <rguenther@suse.de>

	* tree-flow.h (register_new_name_mapping): Remove.
	* tree-into-ssa.c (register_new_name_mapping): Likewise.
	(add_new_name_mapping): Do not push/pop timevar here.
	(create_new_def_for): Instead do it here.  Initialize
	update-ssa here, handle a NULL def.
	* tree-vrp.c (build_assert_expr_for): Use create_new_def_for.

From-SVN: r190531
This commit is contained in:
Richard Guenther 2012-08-20 12:04:38 +00:00 committed by Richard Biener
parent c3b3cd8d68
commit 45db3141b7
4 changed files with 47 additions and 58 deletions

View File

@ -1,3 +1,12 @@
2012-08-20 Richard Guenther <rguenther@suse.de>
* tree-flow.h (register_new_name_mapping): Remove.
* tree-into-ssa.c (register_new_name_mapping): Likewise.
(add_new_name_mapping): Do not push/pop timevar here.
(create_new_def_for): Instead do it here. Initialize
update-ssa here, handle a NULL def.
* tree-vrp.c (build_assert_expr_for): Use create_new_def_for.
2012-08-20 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54327

View File

@ -516,7 +516,6 @@ void release_defs_bitset (bitmap toremove);
/* In tree-into-ssa.c */
void update_ssa (unsigned);
void delete_update_ssa (void);
void register_new_name_mapping (tree, tree);
tree create_new_def_for (tree, gimple, def_operand_p);
bool need_ssa_update_p (struct function *);
bool name_registered_for_update_p (tree);

View File

@ -111,15 +111,15 @@ static VEC(gimple_vec, heap) *phis_to_rewrite;
static bitmap blocks_with_phis_to_rewrite;
/* Growth factor for NEW_SSA_NAMES and OLD_SSA_NAMES. These sets need
to grow as the callers to register_new_name_mapping will typically
create new names on the fly. FIXME. Currently set to 1/3 to avoid
frequent reallocations but still need to find a reasonable growth
strategy. */
to grow as the callers to create_new_def_for will create new names on
the fly.
FIXME. Currently set to 1/3 to avoid frequent reallocations but still
need to find a reasonable growth strategy. */
#define NAME_SETS_GROWTH_FACTOR (MAX (3, num_ssa_names / 3))
/* The function the SSA updating data structures have been initialized for.
NULL if they need to be initialized by register_new_name_mapping. */
NULL if they need to be initialized by create_new_def_for. */
static struct function *update_ssa_initialized_fn = NULL;
/* Global data to attach to the main dominator walk structure. */
@ -587,8 +587,6 @@ add_to_repl_tbl (tree new_tree, tree old)
static void
add_new_name_mapping (tree new_tree, tree old)
{
timevar_push (TV_TREE_SSA_INCREMENTAL);
/* OLD and NEW_TREE must be different SSA names for the same symbol. */
gcc_assert (new_tree != old && SSA_NAME_VAR (new_tree) == SSA_NAME_VAR (old));
@ -613,8 +611,6 @@ add_new_name_mapping (tree new_tree, tree old)
respectively. */
SET_BIT (new_ssa_names, SSA_NAME_VERSION (new_tree));
SET_BIT (old_ssa_names, SSA_NAME_VERSION (old));
timevar_pop (TV_TREE_SSA_INCREMENTAL);
}
@ -2842,16 +2838,28 @@ delete_update_ssa (void)
/* Create a new name for OLD_NAME in statement STMT and replace the
operand pointed to by DEF_P with the newly created name. Return
the new name and register the replacement mapping <NEW, OLD> in
operand pointed to by DEF_P with the newly created name. If DEF_P
is NULL then STMT should be a GIMPLE assignment.
Return the new name and register the replacement mapping <NEW, OLD> in
update_ssa's tables. */
tree
create_new_def_for (tree old_name, gimple stmt, def_operand_p def)
{
tree new_name = duplicate_ssa_name (old_name, stmt);
tree new_name;
SET_DEF (def, new_name);
timevar_push (TV_TREE_SSA_INCREMENTAL);
if (!update_ssa_initialized_fn)
init_update_ssa (cfun);
gcc_assert (update_ssa_initialized_fn == cfun);
new_name = duplicate_ssa_name (old_name, stmt);
if (def)
SET_DEF (def, new_name);
else
gimple_assign_set_lhs (stmt, new_name);
if (gimple_code (stmt) == GIMPLE_PHI)
{
@ -2861,33 +2869,19 @@ create_new_def_for (tree old_name, gimple stmt, def_operand_p def)
SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_name) = bb_has_abnormal_pred (bb);
}
register_new_name_mapping (new_name, old_name);
add_new_name_mapping (new_name, old_name);
/* For the benefit of passes that will be updating the SSA form on
their own, set the current reaching definition of OLD_NAME to be
NEW_NAME. */
get_ssa_name_ann (old_name)->info.current_def = new_name;
timevar_pop (TV_TREE_SSA_INCREMENTAL);
return new_name;
}
/* Register name NEW to be a replacement for name OLD. This function
must be called for every replacement that should be performed by
update_ssa. */
void
register_new_name_mapping (tree new_tree, tree old)
{
if (!update_ssa_initialized_fn)
init_update_ssa (cfun);
gcc_assert (update_ssa_initialized_fn == cfun);
add_new_name_mapping (new_tree, old);
}
/* Mark virtual operands of FN for renaming by update_ssa. */
void
@ -3056,13 +3050,13 @@ insert_updated_phi_nodes_for (tree var, bitmap_head *dfs, bitmap blocks,
frontier of the blocks where each of NEW_SSA_NAMES are defined.
The mapping between OLD_SSA_NAMES and NEW_SSA_NAMES is setup by
calling register_new_name_mapping for every pair of names that the
calling create_new_def_for to create new defs for names that the
caller wants to replace.
The caller identifies the new names that have been inserted and the
names that need to be replaced by calling register_new_name_mapping
for every pair <NEW, OLD>. Note that the function assumes that the
new names have already been inserted in the IL.
The caller cretaes the new names to be inserted and the names that need
to be replaced by calling create_new_def_for for each old definition
to be replaced. Note that the function assumes that the
new defining statement has already been inserted in the IL.
For instance, given the following code:

View File

@ -4152,33 +4152,20 @@ debug_all_value_ranges (void)
static gimple
build_assert_expr_for (tree cond, tree v)
{
tree n;
tree a;
gimple assertion;
gcc_assert (TREE_CODE (v) == SSA_NAME);
n = duplicate_ssa_name (v, NULL);
gcc_assert (TREE_CODE (v) == SSA_NAME
&& COMPARISON_CLASS_P (cond));
if (COMPARISON_CLASS_P (cond))
{
tree a = build2 (ASSERT_EXPR, TREE_TYPE (v), v, cond);
assertion = gimple_build_assign (n, a);
}
else if (TREE_CODE (cond) == SSA_NAME)
{
/* Given V, build the assignment N = true. */
gcc_assert (v == cond);
assertion = gimple_build_assign (n, boolean_true_node);
}
else
gcc_unreachable ();
SSA_NAME_DEF_STMT (n) = assertion;
a = build2 (ASSERT_EXPR, TREE_TYPE (v), v, cond);
assertion = gimple_build_assign (NULL_TREE, a);
/* The new ASSERT_EXPR, creates a new SSA name that replaces the
operand of the ASSERT_EXPR. Register the new name and the old one
in the replacement table so that we can fix the SSA web after
adding all the ASSERT_EXPRs. */
register_new_name_mapping (n, v);
operand of the ASSERT_EXPR. Create it so the new name and the old one
are registered in the replacement table so that we can fix the SSA web
after adding all the ASSERT_EXPRs. */
create_new_def_for (v, assertion, NULL);
return assertion;
}