diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-08-02 11:40:20 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-08-02 11:40:20 +0000 |
commit | c6dfe037e06639cfd2b8d10f540ca85aebe603cc (patch) | |
tree | 7d44a4c9f671c4b247e1567327eda00cf283e581 /gcc/tree-dfa.c | |
parent | ff11bbd5a35a59f4bc4f9828079295bc3b45f87f (diff) | |
download | gcc-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.c | 45 |
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 |