diff options
author | Richard Guenther <rguenther@suse.de> | 2012-08-10 08:29:29 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-08-10 08:29:29 +0000 |
commit | 70b5e7dc7356529b557b613c7dee032c9d89d035 (patch) | |
tree | 997e1b096111bead6b6ecba118fde1adf2e1a6ff /gcc/tree-inline.c | |
parent | c170d40f35ca1d3b3ee6b152066b0abef9c8c93a (diff) | |
download | gcc-70b5e7dc7356529b557b613c7dee032c9d89d035.zip gcc-70b5e7dc7356529b557b613c7dee032c9d89d035.tar.gz gcc-70b5e7dc7356529b557b613c7dee032c9d89d035.tar.bz2 |
tree.h (SSA_NAME_VAR): Return NULL_TREE if an IDENTIFIER_NODE is recorded as var.
2012-08-10 Richard Guenther <rguenther@suse.de>
* tree.h (SSA_NAME_VAR): Return NULL_TREE if an IDENTIFIER_NODE
is recorded as var.
(SSA_NAME_IDENTIFIER): Return the IDENTIFIER_NODE of the SSA_NAME
or its SSA_NAME_VAR.
(SET_SSA_NAME_VAR_OR_IDENTIFIER): New setter.
* tree-ssanames.c (make_ssa_name_fn): Handle creating anonymous
SSA names by passing a type instead of a variable decl.
(release_ssa_name): Use SET_SSA_NAME_VAR_OR_IDENTIFIER.
(copy_ssa_name_fn): Handle anonymous SSA names.
(replace_ssa_name_symbol): Use SET_SSA_NAME_VAR_OR_IDENTIFIER.
* tree-flow-inline.h (make_temp_ssa_name): New inline function.
* tree-pretty-print.c (dump_generic_node): Use SSA_NAME_IDENTIFIER,
dump SSA names without a name as <anon>.
* cfgexpand.c (expand_used_vars): Assing anonymous SSA names we are
going to expand a decl.
(gimple_expand_cfg): Assign all SSA names of a partition the
decl we created for its leader.
* tree-ssa.c (target_for_debug_bind): Handle SSA_NAMEs.
(verify_ssa_name): Handle anonymous SSA names.
(verify_def): Likewise.
* tree-predcom.c (eliminate_temp_copies): Likewise.
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Likewise.
* tree-ssa-live.c (var_map_base_init): Compute conflicts for
anonymous SSA names with the same type.
(mark_all_vars_used_1): Handle anonymous SSA names.
(verify_live_on_entry): Likewise.
* tree-ssa-coalesce.c (abnormal_corrupt): Remove.
(create_outofssa_var_map): Adjust with respect to conflicts we
compute for anonymous SSA names. Do not restrict abnormal
coalescing.
(coalesce_partitions): Do not restrict abnormal coalescing.
Assert we only ever coalesce variables we computed conflicts for.
* tree-ssa-ter.c (process_replaceable): Do not restrict TER
of anonymous names.
* expr.c (expand_expr_real_1): Handle anonymous SSA names
expanded from IVOPTs by creating a raw REG here.
* tree-cfg.c (replace_ssa_name): Handle anonymous SSA names.
(dump_function_to_file): Dump anonymous SSA names alongside
with their types in the variable list.
(verify_gimple_return): Guard use of SSA_NAME_VAR.
* tree-into-ssa.c (mark_for_renaming): Handle a NULL symbol.
(rewrite_into_ssa): Make SSA names anonymous.
* tree-ssa-structalias.c (alias_get_name): Rewrite.
* tree-ssa-uninit.c (ssa_undefined_value_p): Handle anonymous
SSA names.
(warn_uninitialized_phi): Likewise.
* tree-ssa-loop-ivopts.c (prepare_decl_rtl): Defer expanding
anonymous SSA names to the expander.
(determine_iv_cost): Anonymous SSA names are artificial.
* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop):
Handle anonymous SSA names.
* lto-streamer-out.c (output_ssa_names): Stream SSA_NAME_VAR
or if NULL, the type of the SSA name.
* tree-inline.c (remap_ssa_name): Handle anonymous SSA names,
remap names as anonymous where appropriate.
(insert_init_stmt): Pass SSA names down to insert_init_debug_bind.
* tree-ssa-uncprop.c (uncprop_into_successor_phis): Adjust
according to what we create conflicts for in out-of-SSA
coalescing.
* tree-parloops.c (separate_decls_in_region_name): Handle
anonymous SSA names.
(add_field_for_name): Likewise.
* tree.c (get_name): Handle SSA names.
* tree-ssa-loop-im.c (gen_lsm_tmp_name): Defer to get_name for
SSA_NAMEs.
* tree-vect-loop-manip.c (adjust_debug_stmts): Use
virtual_operand_p.
* tree-sra.c (create_access_replacement): Give up generating
a DECL_DEBUG_EXPR for SSA names in the memory reference.
(replace_removed_params_ssa_names): Guard use of SSA_NAME_VAR.
* tree-complex.c (get_component_ssa_name): Handle anonymous
SSA names.
(set_component_ssa_name): Likewise.
* tree-ssa-sccvn.c (visit_reference_op_load): Likewise.
* tree-object-size.c (collect_object_sizes_for): Handle
uninitialized SSA names properly.
* ipa-inline-analysis.c (eliminated_by_inlining_prob): Guard use of
SSA_NAME_VAR.
* ipa-split.c (test_nonssa_use): Likewise.
(consider_split): Likewise.
(mark_nonssa_use): Likewise.
c-family/
* c-pretty-print.c (pp_c_expression): Handle anonymous SSA names.
cp/
* error.c (dump_expr): Likewise.
* g++.dg/plugin/selfassign.c: Adjust.
* gcc.dg/plugin/selfassign.c: Likewise.
* gcc.dg/strlenopt-11.c: Likewise.
* gcc.dg/strlenopt-13.c: Likewise.
* gcc.dg/no-strict-overflow-4.c: Likewise.
* gcc.dg/strict-overflow-4.c: Likewise.
* gcc.dg/tree-ssa/alias-11.c: Likewise.
* gcc.dg/tree-ssa/alias-6.c: Likewise.
* gcc.dg/tree-ssa/asm-3.c: Likewise.
* gcc.dg/tree-ssa/pr18908.c: Likewise.
* gcc.dg/tree-ssa/pr19431.c: Likewise.
* gcc.dg/tree-ssa/ssa-pre-21.c: Likewise.
* gcc.dg/tree-ssa/phi-opt-10.c: Likewise.
* gcc.dg/tree-ssa/phi-opt-7.c: Likewise.
* gcc.dg/tree-ssa/slsr-27.c: Likewise.
* gcc.dg/tree-ssa/slsr-28.c: Likewise.
* gcc.dg/tree-ssa/slsr-29.c: Likewise.
* gcc.dg/pr46309.c: Likewise.
* gcc.dg/tree-ssa/loop-5.c: Likewise.
From-SVN: r190284
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 6b6b78c..879292b 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -176,7 +176,7 @@ static int processing_debug_stmt = 0; static tree remap_ssa_name (tree name, copy_body_data *id) { - tree new_tree; + tree new_tree, var; tree *n; gcc_assert (TREE_CODE (name) == SSA_NAME); @@ -218,9 +218,38 @@ remap_ssa_name (tree name, copy_body_data *id) return name; } + /* Remap anonymous SSA names or SSA names of anonymous decls. */ + var = SSA_NAME_VAR (name); + if (!var + || (!SSA_NAME_IS_DEFAULT_DEF (name) + && TREE_CODE (var) == VAR_DECL + && !VAR_DECL_IS_VIRTUAL_OPERAND (var) + && DECL_ARTIFICIAL (var) + && DECL_IGNORED_P (var) + && !DECL_NAME (var))) + { + struct ptr_info_def *pi; + new_tree = make_ssa_name (remap_type (TREE_TYPE (name), id), NULL); + if (!var && SSA_NAME_IDENTIFIER (name)) + SET_SSA_NAME_VAR_OR_IDENTIFIER (new_tree, SSA_NAME_IDENTIFIER (name)); + insert_decl_map (id, name, new_tree); + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_tree) + = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name); + /* At least IPA points-to info can be directly transferred. */ + if (id->src_cfun->gimple_df + && id->src_cfun->gimple_df->ipa_pta + && (pi = SSA_NAME_PTR_INFO (name)) + && !pi->pt.anything) + { + struct ptr_info_def *new_pi = get_ptr_info (new_tree); + new_pi->pt = pi->pt; + } + return new_tree; + } + /* Do not set DEF_STMT yet as statement is not copied yet. We do that in copy_bb. */ - new_tree = remap_decl (SSA_NAME_VAR (name), id); + new_tree = remap_decl (var, id); /* We might've substituted constant or another SSA_NAME for the variable. @@ -229,7 +258,8 @@ remap_ssa_name (tree name, copy_body_data *id) inlining: this saves us from need to introduce PHI node in a case return value is just partly initialized. */ if ((TREE_CODE (new_tree) == VAR_DECL || TREE_CODE (new_tree) == PARM_DECL) - && (TREE_CODE (SSA_NAME_VAR (name)) != RESULT_DECL + && (!SSA_NAME_VAR (name) + || TREE_CODE (SSA_NAME_VAR (name)) != RESULT_DECL || !id->transform_return_to_modify)) { struct ptr_info_def *pi; @@ -259,7 +289,8 @@ remap_ssa_name (tree name, copy_body_data *id) regions of the CFG, but this is expensive to test. */ if (id->entry_bb && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name) - && TREE_CODE (SSA_NAME_VAR (name)) != PARM_DECL + && (!SSA_NAME_VAR (name) + || TREE_CODE (SSA_NAME_VAR (name)) != PARM_DECL) && (id->entry_bb != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest || EDGE_COUNT (id->entry_bb->preds) != 1)) { @@ -1184,6 +1215,7 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id) if (retval && (TREE_CODE (retval) != RESULT_DECL && (TREE_CODE (retval) != SSA_NAME + || ! SSA_NAME_VAR (retval) || TREE_CODE (SSA_NAME_VAR (retval)) != RESULT_DECL))) { copy = gimple_build_assign (id->retvar, retval); @@ -2474,14 +2506,8 @@ insert_init_stmt (copy_body_data *id, basic_block bb, gimple init_stmt) if (!is_gimple_debug (init_stmt) && MAY_HAVE_DEBUG_STMTS) { - tree var, def = gimple_assign_lhs (init_stmt); - - if (TREE_CODE (def) == SSA_NAME) - var = SSA_NAME_VAR (def); - else - var = def; - - insert_init_debug_bind (id, bb, var, def, init_stmt); + tree def = gimple_assign_lhs (init_stmt); + insert_init_debug_bind (id, bb, def, def, init_stmt); } } } |