Commit f004ab02 by Andrew MacLeod Committed by Andrew Macleod

re PR c++/26757 (C++ front-end producing two DECLs with the same UID)


2006-05-23  Andrew MacLeod  <amacleod@redhat.com>
	
	PR c++/26757
	* tree-ssa-loop-im.c (determine_invariantness_stmt): Use 
	add_referenced_var instead of add_referenced_tmp_var.
	* tree-complex.c (create_one_component_var): Use add_referenced_var.
	* tree-ssa-loop-manip.c (create_iv, tree_unroll_loop): Use
	add_referenced_var.
	* tree-tailcall.c (adjust_accumulator_values, adjust_return_value,
	tree_optimize_tail_calls_1): Use add_referenced_var.
	* tree-ssa-loop-ivopts.c (create_new_iv): Use add_referenced_var.
	* tree-ssa-alias.c (create_memory_tag, create_global_var, create_sft):
	Use add_referenced_var.
	* tree-if-conv.c (ifc_temp_var): Use add_referenced_var.
	* gimplify.c (force_gimple_operand): Use add_referenced_var.
	* tree-ssa-phiopt.c (conditional_replacement, abs_replacement):
	Use add_referenced_var.
	* tree-dfa.c (struct walk_state): Remove.
	(find_referenced_vars): Remove walk state and vars_found hash table.
	(make_rename_temp): Use add_referenced_var.
	(find_vars_r): Pass less parameters to add_referenced_var.
	(referenced_var_p): New.  Is var in referenced_var hash table.
	(referenced_var_insert): Assert var isn't already in hash table.
	(add_referenced_var): Don't need walk_state parameter.  Add var if it
	isn't already in the hash table.
	(add_referenced_tmp_var): Remove.
	(find_new_referenced_vars_1): Use add_referenced_var.
	* tree-ssa-pre.c (create_expression_by_pieces, 
	insert_into_preds_of_block, insert_extra_phis, realify_fake_stores):
	Use add_referenced_var.
	* tree-vect-patterns.c (vect_pattern_recog_1): Use add_referenced_var.
	* lambda-code.c (lbv_to_gcc_expression, lle_to_gcc_expression,
	lambda_loopnest_to_gcc_loopnest, perfect_nestify): Use 
	add_referenced_var.
	* tree-vect-transform.c (vect_create_addr_base_for_vector_ref,
	vect_create_data_ref_ptr, vect_create_destination_var,
	vect_init_vector, vect_build_loop_niters, 
	vect_generate_tmps_on_preheader, vect_update_ivs_after_vectorizer,
	vect_gen_niters_for_prolog_loop, vect_create_cond_for_align_checks):
	Use add_referenced_var.
	* tree-outof-ssa.c (create_temp): Use add_referenced_var.
	* tree-flow.h (add_referenced_tmp_var): Remove prototype
	(add_referenced_var): Add prototype.
	* tree-ssa-structalias.c (get_constraint_for, 
	intra_create_variable_infos): Use add_referenced_var.

From-SVN: r114018
parent dcdf969d
2006-05-23 Andrew MacLeod <amacleod@redhat.com>
PR c++/26757
* tree-ssa-loop-im.c (determine_invariantness_stmt): Use
add_referenced_var instead of add_referenced_tmp_var.
* tree-complex.c (create_one_component_var): Use add_referenced_var.
* tree-ssa-loop-manip.c (create_iv, tree_unroll_loop): Use
add_referenced_var.
* tree-tailcall.c (adjust_accumulator_values, adjust_return_value,
tree_optimize_tail_calls_1): Use add_referenced_var.
* tree-ssa-loop-ivopts.c (create_new_iv): Use add_referenced_var.
* tree-ssa-alias.c (create_memory_tag, create_global_var, create_sft):
Use add_referenced_var.
* tree-if-conv.c (ifc_temp_var): Use add_referenced_var.
* gimplify.c (force_gimple_operand): Use add_referenced_var.
* tree-ssa-phiopt.c (conditional_replacement, abs_replacement):
Use add_referenced_var.
* tree-dfa.c (struct walk_state): Remove.
(find_referenced_vars): Remove walk state and vars_found hash table.
(make_rename_temp): Use add_referenced_var.
(find_vars_r): Pass less parameters to add_referenced_var.
(referenced_var_p): New. Is var in referenced_var hash table.
(referenced_var_insert): Assert var isn't already in hash table.
(add_referenced_var): Don't need walk_state parameter. Add var if it
isn't already in the hash table.
(add_referenced_tmp_var): Remove.
(find_new_referenced_vars_1): Use add_referenced_var.
* tree-ssa-pre.c (create_expression_by_pieces,
insert_into_preds_of_block, insert_extra_phis, realify_fake_stores):
Use add_referenced_var.
* tree-vect-patterns.c (vect_pattern_recog_1): Use add_referenced_var.
* lambda-code.c (lbv_to_gcc_expression, lle_to_gcc_expression,
lambda_loopnest_to_gcc_loopnest, perfect_nestify): Use
add_referenced_var.
* tree-vect-transform.c (vect_create_addr_base_for_vector_ref,
vect_create_data_ref_ptr, vect_create_destination_var,
vect_init_vector, vect_build_loop_niters,
vect_generate_tmps_on_preheader, vect_update_ivs_after_vectorizer,
vect_gen_niters_for_prolog_loop, vect_create_cond_for_align_checks):
Use add_referenced_var.
* tree-outof-ssa.c (create_temp): Use add_referenced_var.
* tree-flow.h (add_referenced_tmp_var): Remove prototype
(add_referenced_var): Add prototype.
* tree-ssa-structalias.c (get_constraint_for,
intra_create_variable_infos): Use add_referenced_var.
2006-05-23 Alexandre Oliva <aoliva@redhat.com> 2006-05-23 Alexandre Oliva <aoliva@redhat.com>
* simplify-rtx.c (simplify_subreg): Adjust REG_OFFSET for * simplify-rtx.c (simplify_subreg): Adjust REG_OFFSET for
......
...@@ -6228,7 +6228,7 @@ force_gimple_operand (tree expr, tree *stmts, bool simple, tree var) ...@@ -6228,7 +6228,7 @@ force_gimple_operand (tree expr, tree *stmts, bool simple, tree var)
if (referenced_vars) if (referenced_vars)
{ {
for (t = gimplify_ctxp->temps; t ; t = TREE_CHAIN (t)) for (t = gimplify_ctxp->temps; t ; t = TREE_CHAIN (t))
add_referenced_tmp_var (t); add_referenced_var (t);
} }
pop_gimplify_context (NULL); pop_gimplify_context (NULL);
......
...@@ -1539,7 +1539,7 @@ lbv_to_gcc_expression (lambda_body_vector lbv, ...@@ -1539,7 +1539,7 @@ lbv_to_gcc_expression (lambda_body_vector lbv,
/* Create a statement list and a linear expression temporary. */ /* Create a statement list and a linear expression temporary. */
stmts = alloc_stmt_list (); stmts = alloc_stmt_list ();
resvar = create_tmp_var (type, "lbvtmp"); resvar = create_tmp_var (type, "lbvtmp");
add_referenced_tmp_var (resvar); add_referenced_var (resvar);
/* Start at 0. */ /* Start at 0. */
stmt = build2 (MODIFY_EXPR, void_type_node, resvar, integer_zero_node); stmt = build2 (MODIFY_EXPR, void_type_node, resvar, integer_zero_node);
...@@ -1626,7 +1626,7 @@ lle_to_gcc_expression (lambda_linear_expression lle, ...@@ -1626,7 +1626,7 @@ lle_to_gcc_expression (lambda_linear_expression lle,
/* Create a statement list and a linear expression temporary. */ /* Create a statement list and a linear expression temporary. */
stmts = alloc_stmt_list (); stmts = alloc_stmt_list ();
resvar = create_tmp_var (type, "lletmp"); resvar = create_tmp_var (type, "lletmp");
add_referenced_tmp_var (resvar); add_referenced_var (resvar);
/* Build up the linear expressions, and put the variable representing the /* Build up the linear expressions, and put the variable representing the
result in the results array. */ result in the results array. */
...@@ -1846,7 +1846,7 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest, ...@@ -1846,7 +1846,7 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
/* First, build the new induction variable temporary */ /* First, build the new induction variable temporary */
ivvar = create_tmp_var (type, "lnivtmp"); ivvar = create_tmp_var (type, "lnivtmp");
add_referenced_tmp_var (ivvar); add_referenced_var (ivvar);
VEC_safe_push (tree, heap, new_ivs, ivvar); VEC_safe_push (tree, heap, new_ivs, ivvar);
...@@ -2457,7 +2457,7 @@ perfect_nestify (struct loops *loops, ...@@ -2457,7 +2457,7 @@ perfect_nestify (struct loops *loops,
/* Create the new iv. */ /* Create the new iv. */
oldivvar = VEC_index (tree, loopivs, 0); oldivvar = VEC_index (tree, loopivs, 0);
ivvar = create_tmp_var (TREE_TYPE (oldivvar), "perfectiv"); ivvar = create_tmp_var (TREE_TYPE (oldivvar), "perfectiv");
add_referenced_tmp_var (ivvar); add_referenced_var (ivvar);
standard_iv_increment_position (newloop, &bsi, &insert_after); standard_iv_increment_position (newloop, &bsi, &insert_after);
create_iv (VEC_index (tree, lbounds, 0), create_iv (VEC_index (tree, lbounds, 0),
build_int_cst (TREE_TYPE (oldivvar), VEC_index (int, steps, 0)), build_int_cst (TREE_TYPE (oldivvar), VEC_index (int, steps, 0)),
...@@ -2468,7 +2468,7 @@ perfect_nestify (struct loops *loops, ...@@ -2468,7 +2468,7 @@ perfect_nestify (struct loops *loops,
exit_condition = get_loop_exit_condition (newloop); exit_condition = get_loop_exit_condition (newloop);
uboundvar = create_tmp_var (integer_type_node, "uboundvar"); uboundvar = create_tmp_var (integer_type_node, "uboundvar");
add_referenced_tmp_var (uboundvar); add_referenced_var (uboundvar);
stmt = build2 (MODIFY_EXPR, void_type_node, uboundvar, stmt = build2 (MODIFY_EXPR, void_type_node, uboundvar,
VEC_index (tree, ubounds, 0)); VEC_index (tree, ubounds, 0));
uboundvar = make_ssa_name (uboundvar, stmt); uboundvar = make_ssa_name (uboundvar, stmt);
......
...@@ -387,7 +387,7 @@ create_one_component_var (tree type, tree orig, const char *prefix, ...@@ -387,7 +387,7 @@ create_one_component_var (tree type, tree orig, const char *prefix,
const char *suffix, enum tree_code code) const char *suffix, enum tree_code code)
{ {
tree r = create_tmp_var (type, prefix); tree r = create_tmp_var (type, prefix);
add_referenced_tmp_var (r); add_referenced_var (r);
DECL_SOURCE_LOCATION (r) = DECL_SOURCE_LOCATION (orig); DECL_SOURCE_LOCATION (r) = DECL_SOURCE_LOCATION (orig);
DECL_ARTIFICIAL (r) = 1; DECL_ARTIFICIAL (r) = 1;
......
...@@ -65,19 +65,10 @@ struct dfa_stats_d ...@@ -65,19 +65,10 @@ struct dfa_stats_d
}; };
/* State information for find_vars_r. */
struct walk_state
{
/* Hash table used to avoid adding the same variable more than once. */
htab_t vars_found;
};
/* Local functions. */ /* Local functions. */
static void collect_dfa_stats (struct dfa_stats_d *); static void collect_dfa_stats (struct dfa_stats_d *);
static tree collect_dfa_stats_r (tree *, int *, void *); static tree collect_dfa_stats_r (tree *, int *, void *);
static tree find_vars_r (tree *, int *, void *); static tree find_vars_r (tree *, int *, void *);
static void add_referenced_var (tree, struct walk_state *);
/* Global declarations. */ /* Global declarations. */
...@@ -106,23 +97,16 @@ htab_t default_defs; ...@@ -106,23 +97,16 @@ htab_t default_defs;
static unsigned int static unsigned int
find_referenced_vars (void) find_referenced_vars (void)
{ {
htab_t vars_found;
basic_block bb; basic_block bb;
block_stmt_iterator si; block_stmt_iterator si;
struct walk_state walk_state;
vars_found = htab_create (50, htab_hash_pointer, htab_eq_pointer, NULL);
memset (&walk_state, 0, sizeof (walk_state));
walk_state.vars_found = vars_found;
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si)) for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
{ {
tree *stmt_p = bsi_stmt_ptr (si); tree *stmt_p = bsi_stmt_ptr (si);
walk_tree (stmt_p, find_vars_r, &walk_state, NULL); walk_tree (stmt_p, find_vars_r, NULL, NULL);
} }
htab_delete (vars_found);
return 0; return 0;
} }
...@@ -243,7 +227,7 @@ make_rename_temp (tree type, const char *prefix) ...@@ -243,7 +227,7 @@ make_rename_temp (tree type, const char *prefix)
if (referenced_vars) if (referenced_vars)
{ {
add_referenced_tmp_var (t); add_referenced_var (t);
mark_sym_for_renaming (t); mark_sym_for_renaming (t);
} }
...@@ -607,14 +591,12 @@ collect_dfa_stats_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED, ...@@ -607,14 +591,12 @@ collect_dfa_stats_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
the function. */ the function. */
static tree static tree
find_vars_r (tree *tp, int *walk_subtrees, void *data) find_vars_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
{ {
struct walk_state *walk_state = (struct walk_state *) data;
/* If T is a regular variable that the optimizers are interested /* If T is a regular variable that the optimizers are interested
in, add it to the list of variables. */ in, add it to the list of variables. */
if (SSA_VAR_P (*tp)) if (SSA_VAR_P (*tp))
add_referenced_var (*tp, walk_state); add_referenced_var (*tp);
/* Type, _DECL and constant nodes have no interesting children. /* Type, _DECL and constant nodes have no interesting children.
Ignore them. */ Ignore them. */
...@@ -624,6 +606,21 @@ find_vars_r (tree *tp, int *walk_subtrees, void *data) ...@@ -624,6 +606,21 @@ find_vars_r (tree *tp, int *walk_subtrees, void *data)
return NULL_TREE; return NULL_TREE;
} }
/* Lookup VAR in the referenced_vars hashtable and return true if it is
present. */
static inline bool
referenced_var_p (tree var)
{
struct int_tree_map *h, in;
in.uid = DECL_UID (var);
h = (struct int_tree_map *) htab_find_with_hash (referenced_vars,
&in,
in.uid);
if (h)
return h->to != NULL_TREE;
return false;
}
/* Lookup UID in the referenced_vars hashtable and return the associated /* Lookup UID in the referenced_vars hashtable and return the associated
variable. */ variable. */
...@@ -652,6 +649,9 @@ referenced_var_insert (unsigned int uid, tree to) ...@@ -652,6 +649,9 @@ referenced_var_insert (unsigned int uid, tree to)
h->uid = uid; h->uid = uid;
h->to = to; h->to = to;
loc = htab_find_slot_with_hash (referenced_vars, h, uid, INSERT); loc = htab_find_slot_with_hash (referenced_vars, h, uid, INSERT);
/* This assert can only trigger if a variable with the same UID has been
inserted already. */
gcc_assert ((*(struct int_tree_map **)loc) == NULL);
*(struct int_tree_map **) loc = h; *(struct int_tree_map **) loc = h;
} }
...@@ -705,33 +705,21 @@ set_default_def (tree var, tree def) ...@@ -705,33 +705,21 @@ set_default_def (tree var, tree def)
} }
} }
/* Add VAR to the list of dereferenced variables. /* Add VAR to the list of referenced variables if it isn't already there. */
WALK_STATE contains a hash table used to avoid adding the same
variable more than once. Note that this function assumes that
VAR is a valid SSA variable. If WALK_STATE is NULL, no
duplicate checking is done. */
static void void
add_referenced_var (tree var, struct walk_state *walk_state) add_referenced_var (tree var)
{ {
void **slot;
var_ann_t v_ann; var_ann_t v_ann;
v_ann = get_var_ann (var); v_ann = get_var_ann (var);
gcc_assert (DECL_P (var));
if (walk_state)
slot = htab_find_slot (walk_state->vars_found, (void *) var, INSERT); if (!referenced_var_p (var))
else
slot = NULL;
if (slot == NULL || *slot == NULL)
{ {
/* This is the first time we find this variable, add it to the /* This is the first time we find this variable, add it to the
REFERENCED_VARS array and annotate it with attributes that are REFERENCED_VARS array and annotate it with attributes that are
intrinsic to the variable. */ intrinsic to the variable. */
if (slot)
*slot = (void *) var;
referenced_var_insert (DECL_UID (var), var); referenced_var_insert (DECL_UID (var), var);
...@@ -750,7 +738,7 @@ add_referenced_var (tree var, struct walk_state *walk_state) ...@@ -750,7 +738,7 @@ add_referenced_var (tree var, struct walk_state *walk_state)
variables because it cannot be propagated by the variables because it cannot be propagated by the
optimizers. */ optimizers. */
&& (TREE_CONSTANT (var) || TREE_READONLY (var))) && (TREE_CONSTANT (var) || TREE_READONLY (var)))
walk_tree (&DECL_INITIAL (var), find_vars_r, walk_state, 0); walk_tree (&DECL_INITIAL (var), find_vars_r, NULL, 0);
} }
} }
...@@ -778,19 +766,6 @@ get_virtual_var (tree var) ...@@ -778,19 +766,6 @@ get_virtual_var (tree var)
return var; return var;
} }
/* Add a temporary variable to REFERENCED_VARS. This is similar to
add_referenced_var, but is used by passes that need to add new temps to
the REFERENCED_VARS array after the program has been scanned for
variables. The variable will just receive a new UID and be added
to the REFERENCED_VARS array without checking for duplicates. */
void
add_referenced_tmp_var (tree var)
{
add_referenced_var (var, NULL);
}
/* Mark all the non-SSA variables found in STMT's operands to be /* Mark all the non-SSA variables found in STMT's operands to be
processed by update_ssa. */ processed by update_ssa. */
...@@ -868,7 +843,7 @@ find_new_referenced_vars_1 (tree *tp, int *walk_subtrees, ...@@ -868,7 +843,7 @@ find_new_referenced_vars_1 (tree *tp, int *walk_subtrees,
if (TREE_CODE (t) == VAR_DECL && !var_ann (t)) if (TREE_CODE (t) == VAR_DECL && !var_ann (t))
{ {
add_referenced_tmp_var (t); add_referenced_var (t);
mark_sym_for_renaming (t); mark_sym_for_renaming (t);
} }
......
...@@ -633,7 +633,7 @@ extern void debug_variable (tree); ...@@ -633,7 +633,7 @@ extern void debug_variable (tree);
extern void dump_subvars_for (FILE *, tree); extern void dump_subvars_for (FILE *, tree);
extern void debug_subvars_for (tree); extern void debug_subvars_for (tree);
extern tree get_virtual_var (tree); extern tree get_virtual_var (tree);
extern void add_referenced_tmp_var (tree); extern void add_referenced_var (tree);
extern void mark_new_vars_to_rename (tree); extern void mark_new_vars_to_rename (tree);
extern void find_new_referenced_vars (tree *); extern void find_new_referenced_vars (tree *);
......
...@@ -989,7 +989,7 @@ ifc_temp_var (tree type, tree exp) ...@@ -989,7 +989,7 @@ ifc_temp_var (tree type, tree exp)
/* Create new temporary variable. */ /* Create new temporary variable. */
var = create_tmp_var (type, name); var = create_tmp_var (type, name);
add_referenced_tmp_var (var); add_referenced_var (var);
/* Build new statement to assign EXP to new variable. */ /* Build new statement to assign EXP to new variable. */
stmt = build2 (MODIFY_EXPR, type, var, exp); stmt = build2 (MODIFY_EXPR, type, var, exp);
......
...@@ -168,9 +168,9 @@ create_temp (tree t) ...@@ -168,9 +168,9 @@ create_temp (tree t)
} }
DECL_ARTIFICIAL (tmp) = DECL_ARTIFICIAL (t); DECL_ARTIFICIAL (tmp) = DECL_ARTIFICIAL (t);
DECL_IGNORED_P (tmp) = DECL_IGNORED_P (t); DECL_IGNORED_P (tmp) = DECL_IGNORED_P (t);
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
/* add_referenced_tmp_var will create the annotation and set up some /* add_referenced_var will create the annotation and set up some
of the flags in the annotation. However, some flags we need to of the flags in the annotation. However, some flags we need to
inherit from our original variable. */ inherit from our original variable. */
var_ann (tmp)->symbol_mem_tag = var_ann (t)->symbol_mem_tag; var_ann (tmp)->symbol_mem_tag = var_ann (t)->symbol_mem_tag;
......
...@@ -2141,7 +2141,7 @@ create_memory_tag (tree type, bool is_type_tag) ...@@ -2141,7 +2141,7 @@ create_memory_tag (tree type, bool is_type_tag)
ann->symbol_mem_tag = NULL_TREE; ann->symbol_mem_tag = NULL_TREE;
/* Add the tag to the symbol table. */ /* Add the tag to the symbol table. */
add_referenced_tmp_var (tag); add_referenced_var (tag);
return tag; return tag;
} }
...@@ -2253,7 +2253,7 @@ create_global_var (void) ...@@ -2253,7 +2253,7 @@ create_global_var (void)
create_var_ann (global_var); create_var_ann (global_var);
mark_call_clobbered (global_var, ESCAPE_UNKNOWN); mark_call_clobbered (global_var, ESCAPE_UNKNOWN);
add_referenced_tmp_var (global_var); add_referenced_var (global_var);
mark_sym_for_renaming (global_var); mark_sym_for_renaming (global_var);
} }
...@@ -2900,7 +2900,7 @@ create_sft (tree var, tree field, unsigned HOST_WIDE_INT offset, ...@@ -2900,7 +2900,7 @@ create_sft (tree var, tree field, unsigned HOST_WIDE_INT offset,
/* Add the new variable to REFERENCED_VARS. */ /* Add the new variable to REFERENCED_VARS. */
ann = get_var_ann (subvar); ann = get_var_ann (subvar);
ann->symbol_mem_tag = NULL; ann->symbol_mem_tag = NULL;
add_referenced_tmp_var (subvar); add_referenced_var (subvar);
SFT_PARENT_VAR (subvar) = var; SFT_PARENT_VAR (subvar) = var;
SFT_OFFSET (subvar) = offset; SFT_OFFSET (subvar) = offset;
SFT_SIZE (subvar) = size; SFT_SIZE (subvar) = size;
......
...@@ -624,7 +624,7 @@ determine_invariantness_stmt (struct dom_walk_data *dw_data ATTRIBUTE_UNUSED, ...@@ -624,7 +624,7 @@ determine_invariantness_stmt (struct dom_walk_data *dw_data ATTRIBUTE_UNUSED,
/* stmt must be MODIFY_EXPR. */ /* stmt must be MODIFY_EXPR. */
var = create_tmp_var (TREE_TYPE (rhs), "reciptmp"); var = create_tmp_var (TREE_TYPE (rhs), "reciptmp");
add_referenced_tmp_var (var); add_referenced_var (var);
stmt1 = build2 (MODIFY_EXPR, void_type_node, var, stmt1 = build2 (MODIFY_EXPR, void_type_node, var,
build2 (RDIV_EXPR, TREE_TYPE (rhs), build2 (RDIV_EXPR, TREE_TYPE (rhs),
......
...@@ -5123,7 +5123,7 @@ create_new_iv (struct ivopts_data *data, struct iv_cand *cand) ...@@ -5123,7 +5123,7 @@ create_new_iv (struct ivopts_data *data, struct iv_cand *cand)
} }
gimple_add_tmp_var (cand->var_before); gimple_add_tmp_var (cand->var_before);
add_referenced_tmp_var (cand->var_before); add_referenced_var (cand->var_before);
base = unshare_expr (cand->iv->base); base = unshare_expr (cand->iv->base);
......
...@@ -60,7 +60,7 @@ create_iv (tree base, tree step, tree var, struct loop *loop, ...@@ -60,7 +60,7 @@ create_iv (tree base, tree step, tree var, struct loop *loop,
if (!var) if (!var)
{ {
var = create_tmp_var (TREE_TYPE (base), "ivtmp"); var = create_tmp_var (TREE_TYPE (base), "ivtmp");
add_referenced_tmp_var (var); add_referenced_var (var);
} }
vb = make_ssa_name (var, NULL_TREE); vb = make_ssa_name (var, NULL_TREE);
...@@ -916,7 +916,7 @@ tree_unroll_loop (struct loops *loops, struct loop *loop, unsigned factor, ...@@ -916,7 +916,7 @@ tree_unroll_loop (struct loops *loops, struct loop *loop, unsigned factor,
else else
{ {
var = create_tmp_var (TREE_TYPE (init), "unrinittmp"); var = create_tmp_var (TREE_TYPE (init), "unrinittmp");
add_referenced_tmp_var (var); add_referenced_var (var);
} }
new_init = make_ssa_name (var, NULL_TREE); new_init = make_ssa_name (var, NULL_TREE);
......
...@@ -410,7 +410,7 @@ conditional_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -410,7 +410,7 @@ conditional_replacement (basic_block cond_bb, basic_block middle_bb,
return false; return false;
tmp = create_tmp_var (TREE_TYPE (cond), NULL); tmp = create_tmp_var (TREE_TYPE (cond), NULL);
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
new_var = make_ssa_name (tmp, NULL); new_var = make_ssa_name (tmp, NULL);
old_result = cond; old_result = cond;
cond = new_var; cond = new_var;
...@@ -512,7 +512,7 @@ conditional_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -512,7 +512,7 @@ conditional_replacement (basic_block cond_bb, basic_block middle_bb,
op0 = TREE_OPERAND (cond, 0); op0 = TREE_OPERAND (cond, 0);
tmp = create_tmp_var (TREE_TYPE (op0), NULL); tmp = create_tmp_var (TREE_TYPE (op0), NULL);
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
cond_tmp = make_ssa_name (tmp, NULL); cond_tmp = make_ssa_name (tmp, NULL);
new = build2 (MODIFY_EXPR, TREE_TYPE (cond_tmp), cond_tmp, op0); new = build2 (MODIFY_EXPR, TREE_TYPE (cond_tmp), cond_tmp, op0);
SSA_NAME_DEF_STMT (cond_tmp) = new; SSA_NAME_DEF_STMT (cond_tmp) = new;
...@@ -959,7 +959,7 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -959,7 +959,7 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb,
if (negate) if (negate)
{ {
tree tmp = create_tmp_var (TREE_TYPE (result), NULL); tree tmp = create_tmp_var (TREE_TYPE (result), NULL);
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
lhs = make_ssa_name (tmp, NULL); lhs = make_ssa_name (tmp, NULL);
} }
else else
......
...@@ -2422,7 +2422,7 @@ create_expression_by_pieces (basic_block block, tree expr, tree stmts) ...@@ -2422,7 +2422,7 @@ create_expression_by_pieces (basic_block block, tree expr, tree stmts)
} }
temp = pretemp; temp = pretemp;
add_referenced_tmp_var (temp); add_referenced_var (temp);
if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE) if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
DECL_COMPLEX_GIMPLE_REG_P (temp) = 1; DECL_COMPLEX_GIMPLE_REG_P (temp) = 1;
...@@ -2565,7 +2565,7 @@ insert_into_preds_of_block (basic_block block, value_set_node_t node, ...@@ -2565,7 +2565,7 @@ insert_into_preds_of_block (basic_block block, value_set_node_t node,
} }
temp = prephitemp; temp = prephitemp;
add_referenced_tmp_var (temp); add_referenced_var (temp);
if (TREE_CODE (type) == COMPLEX_TYPE) if (TREE_CODE (type) == COMPLEX_TYPE)
DECL_COMPLEX_GIMPLE_REG_P (temp) = 1; DECL_COMPLEX_GIMPLE_REG_P (temp) = 1;
...@@ -3040,7 +3040,7 @@ insert_extra_phis (basic_block block, basic_block dom) ...@@ -3040,7 +3040,7 @@ insert_extra_phis (basic_block block, basic_block dom)
fprintf (dump_file, " to merge available but not dominating values "); fprintf (dump_file, " to merge available but not dominating values ");
} }
add_referenced_tmp_var (temp); add_referenced_var (temp);
temp = create_phi_node (temp, block); temp = create_phi_node (temp, block);
NECESSARY (temp) = 0; NECESSARY (temp) = 0;
VEC_safe_push (tree, heap, inserted_exprs, temp); VEC_safe_push (tree, heap, inserted_exprs, temp);
...@@ -3288,7 +3288,7 @@ realify_fake_stores (void) ...@@ -3288,7 +3288,7 @@ realify_fake_stores (void)
tree newstmt; tree newstmt;
/* Mark the temp variable as referenced */ /* Mark the temp variable as referenced */
add_referenced_tmp_var (SSA_NAME_VAR (TREE_OPERAND (stmt, 0))); add_referenced_var (SSA_NAME_VAR (TREE_OPERAND (stmt, 0)));
/* Put the new statement in GC memory, fix up the /* Put the new statement in GC memory, fix up the
SSA_NAME_DEF_STMT on it, and then put it in place of SSA_NAME_DEF_STMT on it, and then put it in place of
......
...@@ -2560,7 +2560,7 @@ get_constraint_for (tree t, VEC (ce_s, heap) **results) ...@@ -2560,7 +2560,7 @@ get_constraint_for (tree t, VEC (ce_s, heap) **results)
heapvar = create_tmp_var_raw (ptr_type_node, "HEAP"); heapvar = create_tmp_var_raw (ptr_type_node, "HEAP");
DECL_EXTERNAL (heapvar) = 1; DECL_EXTERNAL (heapvar) = 1;
if (referenced_vars) if (referenced_vars)
add_referenced_tmp_var (heapvar); add_referenced_var (heapvar);
heapvar_insert (t, heapvar); heapvar_insert (t, heapvar);
} }
...@@ -4074,7 +4074,7 @@ intra_create_variable_infos (void) ...@@ -4074,7 +4074,7 @@ intra_create_variable_infos (void)
"PARM_NOALIAS"); "PARM_NOALIAS");
DECL_EXTERNAL (heapvar) = 1; DECL_EXTERNAL (heapvar) = 1;
if (referenced_vars) if (referenced_vars)
add_referenced_tmp_var (heapvar); add_referenced_var (heapvar);
heapvar_insert (t, heapvar); heapvar_insert (t, heapvar);
} }
id = create_variable_info_for (heapvar, id = create_variable_info_for (heapvar,
......
...@@ -562,7 +562,7 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back) ...@@ -562,7 +562,7 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
build2 (MULT_EXPR, ret_type, m_acc, a)); build2 (MULT_EXPR, ret_type, m_acc, a));
tmp = create_tmp_var (ret_type, "acc_tmp"); tmp = create_tmp_var (ret_type, "acc_tmp");
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
var = make_ssa_name (tmp, stmt); var = make_ssa_name (tmp, stmt);
TREE_OPERAND (stmt, 0) = var; TREE_OPERAND (stmt, 0) = var;
...@@ -641,7 +641,7 @@ adjust_return_value (basic_block bb, tree m, tree a) ...@@ -641,7 +641,7 @@ adjust_return_value (basic_block bb, tree m, tree a)
build2 (MULT_EXPR, ret_type, m_acc, ret_var)); build2 (MULT_EXPR, ret_type, m_acc, ret_var));
tmp = create_tmp_var (ret_type, "acc_tmp"); tmp = create_tmp_var (ret_type, "acc_tmp");
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
var = make_ssa_name (tmp, stmt); var = make_ssa_name (tmp, stmt);
TREE_OPERAND (stmt, 0) = var; TREE_OPERAND (stmt, 0) = var;
...@@ -656,7 +656,7 @@ adjust_return_value (basic_block bb, tree m, tree a) ...@@ -656,7 +656,7 @@ adjust_return_value (basic_block bb, tree m, tree a)
build2 (PLUS_EXPR, ret_type, a_acc, var)); build2 (PLUS_EXPR, ret_type, a_acc, var));
tmp = create_tmp_var (ret_type, "acc_tmp"); tmp = create_tmp_var (ret_type, "acc_tmp");
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
var = make_ssa_name (tmp, stmt); var = make_ssa_name (tmp, stmt);
TREE_OPERAND (stmt, 0) = var; TREE_OPERAND (stmt, 0) = var;
...@@ -928,7 +928,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls) ...@@ -928,7 +928,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
ret_type = TREE_TYPE (DECL_RESULT (current_function_decl)); ret_type = TREE_TYPE (DECL_RESULT (current_function_decl));
tmp = create_tmp_var (ret_type, "add_acc"); tmp = create_tmp_var (ret_type, "add_acc");
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
phi = create_phi_node (tmp, first); phi = create_phi_node (tmp, first);
add_phi_arg (phi, add_phi_arg (phi,
...@@ -944,7 +944,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls) ...@@ -944,7 +944,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
ret_type = TREE_TYPE (DECL_RESULT (current_function_decl)); ret_type = TREE_TYPE (DECL_RESULT (current_function_decl));
tmp = create_tmp_var (ret_type, "mult_acc"); tmp = create_tmp_var (ret_type, "mult_acc");
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
phi = create_phi_node (tmp, first); phi = create_phi_node (tmp, first);
add_phi_arg (phi, add_phi_arg (phi,
......
...@@ -516,7 +516,7 @@ vect_pattern_recog_1 ( ...@@ -516,7 +516,7 @@ vect_pattern_recog_1 (
code = TREE_CODE (pattern_expr); code = TREE_CODE (pattern_expr);
pattern_type = TREE_TYPE (pattern_expr); pattern_type = TREE_TYPE (pattern_expr);
var = create_tmp_var (pattern_type, "patt"); var = create_tmp_var (pattern_type, "patt");
add_referenced_tmp_var (var); add_referenced_var (var);
var_name = make_ssa_name (var, NULL_TREE); var_name = make_ssa_name (var, NULL_TREE);
pattern_expr = build2 (MODIFY_EXPR, void_type_node, var_name, pattern_expr); pattern_expr = build2 (MODIFY_EXPR, void_type_node, var_name, pattern_expr);
SSA_NAME_DEF_STMT (var_name) = pattern_expr; SSA_NAME_DEF_STMT (var_name) = pattern_expr;
......
...@@ -153,14 +153,14 @@ vect_create_addr_base_for_vector_ref (tree stmt, ...@@ -153,14 +153,14 @@ vect_create_addr_base_for_vector_ref (tree stmt,
/* Create base_offset */ /* Create base_offset */
base_offset = size_binop (PLUS_EXPR, base_offset, init); base_offset = size_binop (PLUS_EXPR, base_offset, init);
dest = create_tmp_var (TREE_TYPE (base_offset), "base_off"); dest = create_tmp_var (TREE_TYPE (base_offset), "base_off");
add_referenced_tmp_var (dest); add_referenced_var (dest);
base_offset = force_gimple_operand (base_offset, &new_stmt, false, dest); base_offset = force_gimple_operand (base_offset, &new_stmt, false, dest);
append_to_statement_list_force (new_stmt, new_stmt_list); append_to_statement_list_force (new_stmt, new_stmt_list);
if (offset) if (offset)
{ {
tree tmp = create_tmp_var (TREE_TYPE (base_offset), "offset"); tree tmp = create_tmp_var (TREE_TYPE (base_offset), "offset");
add_referenced_tmp_var (tmp); add_referenced_var (tmp);
offset = fold_build2 (MULT_EXPR, TREE_TYPE (offset), offset, offset = fold_build2 (MULT_EXPR, TREE_TYPE (offset), offset,
DR_STEP (dr)); DR_STEP (dr));
base_offset = fold_build2 (PLUS_EXPR, TREE_TYPE (base_offset), base_offset = fold_build2 (PLUS_EXPR, TREE_TYPE (base_offset),
...@@ -176,7 +176,7 @@ vect_create_addr_base_for_vector_ref (tree stmt, ...@@ -176,7 +176,7 @@ vect_create_addr_base_for_vector_ref (tree stmt,
/* addr_expr = addr_base */ /* addr_expr = addr_base */
addr_expr = vect_get_new_vect_var (scalar_ptr_type, vect_pointer_var, addr_expr = vect_get_new_vect_var (scalar_ptr_type, vect_pointer_var,
get_name (base_name)); get_name (base_name));
add_referenced_tmp_var (addr_expr); add_referenced_var (addr_expr);
vec_stmt = build2 (MODIFY_EXPR, void_type_node, addr_expr, addr_base); vec_stmt = build2 (MODIFY_EXPR, void_type_node, addr_expr, addr_base);
new_temp = make_ssa_name (addr_expr, vec_stmt); new_temp = make_ssa_name (addr_expr, vec_stmt);
TREE_OPERAND (vec_stmt, 0) = new_temp; TREE_OPERAND (vec_stmt, 0) = new_temp;
...@@ -291,7 +291,7 @@ vect_create_data_ref_ptr (tree stmt, ...@@ -291,7 +291,7 @@ vect_create_data_ref_ptr (tree stmt,
vect_ptr_type = build_pointer_type (vectype); vect_ptr_type = build_pointer_type (vectype);
vect_ptr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, vect_ptr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var,
get_name (base_name)); get_name (base_name));
add_referenced_tmp_var (vect_ptr); add_referenced_var (vect_ptr);
/** (2) Add aliasing information to the new vector-pointer: /** (2) Add aliasing information to the new vector-pointer:
...@@ -389,7 +389,7 @@ vect_create_destination_var (tree scalar_dest, tree vectype) ...@@ -389,7 +389,7 @@ vect_create_destination_var (tree scalar_dest, tree vectype)
if (!new_name) if (!new_name)
new_name = "var_"; new_name = "var_";
vec_dest = vect_get_new_vect_var (type, vect_simple_var, new_name); vec_dest = vect_get_new_vect_var (type, vect_simple_var, new_name);
add_referenced_tmp_var (vec_dest); add_referenced_var (vec_dest);
return vec_dest; return vec_dest;
} }
...@@ -416,7 +416,7 @@ vect_init_vector (tree stmt, tree vector_var) ...@@ -416,7 +416,7 @@ vect_init_vector (tree stmt, tree vector_var)
basic_block new_bb; basic_block new_bb;
new_var = vect_get_new_vect_var (vectype, vect_simple_var, "cst_"); new_var = vect_get_new_vect_var (vectype, vect_simple_var, "cst_");
add_referenced_tmp_var (new_var); add_referenced_var (new_var);
init_stmt = build2 (MODIFY_EXPR, vectype, new_var, vector_var); init_stmt = build2 (MODIFY_EXPR, vectype, new_var, vector_var);
new_temp = make_ssa_name (new_var, init_stmt); new_temp = make_ssa_name (new_var, init_stmt);
...@@ -2291,7 +2291,7 @@ vect_build_loop_niters (loop_vec_info loop_vinfo) ...@@ -2291,7 +2291,7 @@ vect_build_loop_niters (loop_vec_info loop_vinfo)
tree ni = unshare_expr (LOOP_VINFO_NITERS (loop_vinfo)); tree ni = unshare_expr (LOOP_VINFO_NITERS (loop_vinfo));
var = create_tmp_var (TREE_TYPE (ni), "niters"); var = create_tmp_var (TREE_TYPE (ni), "niters");
add_referenced_tmp_var (var); add_referenced_var (var);
ni_name = force_gimple_operand (ni, &stmt, false, var); ni_name = force_gimple_operand (ni, &stmt, false, var);
pe = loop_preheader_edge (loop); pe = loop_preheader_edge (loop);
...@@ -2342,7 +2342,7 @@ vect_generate_tmps_on_preheader (loop_vec_info loop_vinfo, ...@@ -2342,7 +2342,7 @@ vect_generate_tmps_on_preheader (loop_vec_info loop_vinfo,
/* Create: ratio = ni >> log2(vf) */ /* Create: ratio = ni >> log2(vf) */
var = create_tmp_var (TREE_TYPE (ni), "bnd"); var = create_tmp_var (TREE_TYPE (ni), "bnd");
add_referenced_tmp_var (var); add_referenced_var (var);
ratio_name = make_ssa_name (var, NULL_TREE); ratio_name = make_ssa_name (var, NULL_TREE);
stmt = build2 (MODIFY_EXPR, void_type_node, ratio_name, stmt = build2 (MODIFY_EXPR, void_type_node, ratio_name,
build2 (RSHIFT_EXPR, TREE_TYPE (ni_name), ni_name, log_vf)); build2 (RSHIFT_EXPR, TREE_TYPE (ni_name), ni_name, log_vf));
...@@ -2355,7 +2355,7 @@ vect_generate_tmps_on_preheader (loop_vec_info loop_vinfo, ...@@ -2355,7 +2355,7 @@ vect_generate_tmps_on_preheader (loop_vec_info loop_vinfo,
/* Create: ratio_mult_vf = ratio << log2 (vf). */ /* Create: ratio_mult_vf = ratio << log2 (vf). */
var = create_tmp_var (TREE_TYPE (ni), "ratio_mult_vf"); var = create_tmp_var (TREE_TYPE (ni), "ratio_mult_vf");
add_referenced_tmp_var (var); add_referenced_var (var);
ratio_mult_vf_name = make_ssa_name (var, NULL_TREE); ratio_mult_vf_name = make_ssa_name (var, NULL_TREE);
stmt = build2 (MODIFY_EXPR, void_type_node, ratio_mult_vf_name, stmt = build2 (MODIFY_EXPR, void_type_node, ratio_mult_vf_name,
build2 (LSHIFT_EXPR, TREE_TYPE (ratio_name), ratio_name, log_vf)); build2 (LSHIFT_EXPR, TREE_TYPE (ratio_name), ratio_name, log_vf));
...@@ -2556,7 +2556,7 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters, ...@@ -2556,7 +2556,7 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
niters, step_expr), init_expr); niters, step_expr), init_expr);
var = create_tmp_var (TREE_TYPE (init_expr), "tmp"); var = create_tmp_var (TREE_TYPE (init_expr), "tmp");
add_referenced_tmp_var (var); add_referenced_var (var);
ni_name = force_gimple_operand (ni, &stmt, false, var); ni_name = force_gimple_operand (ni, &stmt, false, var);
...@@ -2732,7 +2732,7 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters) ...@@ -2732,7 +2732,7 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
} }
var = create_tmp_var (niters_type, "prolog_loop_niters"); var = create_tmp_var (niters_type, "prolog_loop_niters");
add_referenced_tmp_var (var); add_referenced_var (var);
iters_name = force_gimple_operand (iters, &stmt, false, var); iters_name = force_gimple_operand (iters, &stmt, false, var);
/* Insert stmt on loop preheader edge. */ /* Insert stmt on loop preheader edge. */
...@@ -2905,7 +2905,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo, ...@@ -2905,7 +2905,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
sprintf (tmp_name, "%s%d", "addr2int", i); sprintf (tmp_name, "%s%d", "addr2int", i);
addr_tmp = create_tmp_var (int_ptrsize_type, tmp_name); addr_tmp = create_tmp_var (int_ptrsize_type, tmp_name);
add_referenced_tmp_var (addr_tmp); add_referenced_var (addr_tmp);
addr_tmp_name = make_ssa_name (addr_tmp, NULL_TREE); addr_tmp_name = make_ssa_name (addr_tmp, NULL_TREE);
addr_stmt = fold_convert (int_ptrsize_type, addr_base); addr_stmt = fold_convert (int_ptrsize_type, addr_base);
addr_stmt = build2 (MODIFY_EXPR, void_type_node, addr_stmt = build2 (MODIFY_EXPR, void_type_node,
...@@ -2920,7 +2920,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo, ...@@ -2920,7 +2920,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
/* create: or_tmp = or_tmp | addr_tmp */ /* create: or_tmp = or_tmp | addr_tmp */
sprintf (tmp_name, "%s%d", "orptrs", i); sprintf (tmp_name, "%s%d", "orptrs", i);
or_tmp = create_tmp_var (int_ptrsize_type, tmp_name); or_tmp = create_tmp_var (int_ptrsize_type, tmp_name);
add_referenced_tmp_var (or_tmp); add_referenced_var (or_tmp);
new_or_tmp_name = make_ssa_name (or_tmp, NULL_TREE); new_or_tmp_name = make_ssa_name (or_tmp, NULL_TREE);
or_stmt = build2 (MODIFY_EXPR, void_type_node, new_or_tmp_name, or_stmt = build2 (MODIFY_EXPR, void_type_node, new_or_tmp_name,
build2 (BIT_IOR_EXPR, int_ptrsize_type, build2 (BIT_IOR_EXPR, int_ptrsize_type,
...@@ -2939,7 +2939,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo, ...@@ -2939,7 +2939,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
/* create: and_tmp = or_tmp & mask */ /* create: and_tmp = or_tmp & mask */
and_tmp = create_tmp_var (int_ptrsize_type, "andmask" ); and_tmp = create_tmp_var (int_ptrsize_type, "andmask" );
add_referenced_tmp_var (and_tmp); add_referenced_var (and_tmp);
and_tmp_name = make_ssa_name (and_tmp, NULL_TREE); and_tmp_name = make_ssa_name (and_tmp, NULL_TREE);
and_stmt = build2 (MODIFY_EXPR, void_type_node, and_stmt = build2 (MODIFY_EXPR, void_type_node,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment