summaryrefslogtreecommitdiff
path: root/gcc/tree-dfa.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2012-08-02 11:40:20 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2012-08-02 11:40:20 +0000
commitc6dfe037e06639cfd2b8d10f540ca85aebe603cc (patch)
tree7d44a4c9f671c4b247e1567327eda00cf283e581 /gcc/tree-dfa.c
parentff11bbd5a35a59f4bc4f9828079295bc3b45f87f (diff)
downloadgcc-c6dfe037e06639cfd2b8d10f540ca85aebe603cc.tar.gz
2012-08-02 Richard Guenther <rguenther@suse.de>
* tree-flow.h (set_default_def): Rename to ... (set_ssa_default_def): ... this. Take a struct function argument. (gimple_default_def): Rename to ... (ssa_default_def): ... this. (get_or_create_ssa_default_def): New function. * tree-dfa.c: Likewise. (dump_variable): Adjust. * ipa-prop.c (ipa_analyze_params_uses): Adjust, properly check for used parameters. * ipa-split.c (consider_split): Adjust, avoid repeated default-def lookups. (split_function): Likewise. * lto-streamer-in.c (input_ssa_names): Adjust. * omp-low.c (expand_omp_taskreg): Likewise. * tree-cfg.c (replace_ssa_name): Adjust, no need to push/pop cfun. * tree-complex.c (init_parameter_lattice_values): Adjust. (get_component_ssa_name): Likewise. (update_parameter_components): Likewise. * tree-inline.c (remap_ssa_name): Likewise. (setup_one_parameter): Likewise. (initialize_inlined_parameters): Likewise. (declare_return_variable): Likewise. (expand_call_inline): Likewise. (tree_function_versioning): Likewise. * tree-into-ssa.c (get_default_def_for): Remove. (get_reaching_def): Use get_or_create_ssa_default_def instead. * tree-predcom.c (replace_ref_with): Adjust. * tree-sra.c (get_repl_default_def_ssa_name): Likewise. (is_unused_scalar_param): Likewise. (ptr_parm_has_direct_uses): Likewise. (sra_ipa_reset_debug_stmts): Likewise. * tree-ssa-coalesce.c (create_outofssa_var_map): Adjust. * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Likewise. * tree-ssa-live.c (verify_live_on_entry): Likewise. * tree-ssa-math-opts.c (execute_cse_reciprocals): Likewise, avoid repeated default def lookups. * tree-ssa-sccvn.c (run_scc_vn): Likewise. * tree-tailcall.c (arg_needs_copy_p): Adjust. (tree_optimize_tail_calls_1): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190073 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-dfa.c')
-rw-r--r--gcc/tree-dfa.c45
1 files changed, 32 insertions, 13 deletions
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c
index 39555ce4bac..0db5f19ba83 100644
--- a/gcc/tree-dfa.c
+++ b/gcc/tree-dfa.c
@@ -164,10 +164,10 @@ dump_variable (FILE *file, tree var)
if (TREE_THIS_VOLATILE (var))
fprintf (file, ", is volatile");
- if (cfun && gimple_default_def (cfun, var))
+ if (cfun && ssa_default_def (cfun, var))
{
fprintf (file, ", default def: ");
- print_generic_expr (file, gimple_default_def (cfun, var), dump_flags);
+ print_generic_expr (file, ssa_default_def (cfun, var), dump_flags);
}
if (DECL_INITIAL (var))
@@ -312,49 +312,68 @@ collect_dfa_stats (struct dfa_stats_d *dfa_stats_p ATTRIBUTE_UNUSED)
variable. */
tree
-gimple_default_def (struct function *fn, tree var)
+ssa_default_def (struct function *fn, tree var)
{
struct tree_decl_minimal ind;
struct tree_ssa_name in;
- gcc_assert (SSA_VAR_P (var));
+ gcc_assert (TREE_CODE (var) == VAR_DECL
+ || TREE_CODE (var) == PARM_DECL
+ || TREE_CODE (var) == RESULT_DECL);
in.var = (tree)&ind;
ind.uid = DECL_UID (var);
return (tree) htab_find_with_hash (DEFAULT_DEFS (fn), &in, DECL_UID (var));
}
-/* Insert the pair VAR's UID, DEF into the default_defs hashtable. */
+/* Insert the pair VAR's UID, DEF into the default_defs hashtable
+ of function FN. */
void
-set_default_def (tree var, tree def)
+set_ssa_default_def (struct function *fn, tree var, tree def)
{
struct tree_decl_minimal ind;
struct tree_ssa_name in;
void **loc;
- gcc_assert (SSA_VAR_P (var));
+ gcc_assert (TREE_CODE (var) == VAR_DECL
+ || TREE_CODE (var) == PARM_DECL
+ || TREE_CODE (var) == RESULT_DECL);
in.var = (tree)&ind;
ind.uid = DECL_UID (var);
if (!def)
{
- loc = htab_find_slot_with_hash (DEFAULT_DEFS (cfun), &in,
- DECL_UID (var), INSERT);
- gcc_assert (*loc);
- htab_remove_elt (DEFAULT_DEFS (cfun), *loc);
+ loc = htab_find_slot_with_hash (DEFAULT_DEFS (fn), &in,
+ DECL_UID (var), NO_INSERT);
+ if (*loc)
+ htab_clear_slot (DEFAULT_DEFS (fn), loc);
return;
}
gcc_assert (TREE_CODE (def) == SSA_NAME && SSA_NAME_VAR (def) == var);
- loc = htab_find_slot_with_hash (DEFAULT_DEFS (cfun), &in,
+ loc = htab_find_slot_with_hash (DEFAULT_DEFS (fn), &in,
DECL_UID (var), INSERT);
/* Default definition might be changed by tail call optimization. */
if (*loc)
SSA_NAME_IS_DEFAULT_DEF (*(tree *) loc) = false;
- *(tree *) loc = def;
/* Mark DEF as the default definition for VAR. */
+ *(tree *) loc = def;
SSA_NAME_IS_DEFAULT_DEF (def) = true;
}
+/* Retrieve or create a default definition for VAR. */
+
+tree
+get_or_create_ssa_default_def (struct function *fn, tree var)
+{
+ tree ddef = ssa_default_def (fn, var);
+ if (ddef == NULL_TREE)
+ {
+ ddef = make_ssa_name (var, gimple_build_nop ());
+ set_ssa_default_def (cfun, var, ddef);
+ }
+ return ddef;
+}
+
/* If EXP is a handled component reference for a structure, return the
base variable. The access range is delimited by bit positions *POFFSET and