diff options
author | Richard Guenther <rguenther@suse.de> | 2012-07-20 12:56:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-07-20 12:56:41 +0000 |
commit | 824f71b9ff74b82e1c125d98a946ffe9fb4ab319 (patch) | |
tree | 0ce8a7a96625c3f82c59f92dc328c670a5145386 | |
parent | c4669594047cb4a711e77a0ea53c139d9ed16f31 (diff) | |
download | gcc-824f71b9ff74b82e1c125d98a946ffe9fb4ab319.tar.gz |
tree-dfa.c (collect_dfa_stats): Simplify.
2012-07-20 Richard Guenther <rguenther@suse.de>
* tree-dfa.c (collect_dfa_stats): Simplify.
* tree-ssa-structalias.c (compute_may_aliases): Do not dump
referenced vars.
* cfgexpand.c (estimated_stack_frame_size): Walk over local
decls instead of referenced vars.
* tree-ssa.c (delete_tree_ssa): Simplify.
* tree-tailcall.c (find_tail_calls): Walk over local decls
instead of referenced vars.
(add_virtual_phis): Remove.
(tree_optimize_tail_calls_1): Instead mark the virtual operand
for renaming.
From-SVN: r189718
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 7 | ||||
-rw-r--r-- | gcc/tree-dfa.c | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 10 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 9 | ||||
-rw-r--r-- | gcc/tree-tailcall.c | 39 |
6 files changed, 27 insertions, 58 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3bb9763337c..79a9ec77d3d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2012-07-20 Richard Guenther <rguenther@suse.de> + + * tree-dfa.c (collect_dfa_stats): Simplify. + * tree-ssa-structalias.c (compute_may_aliases): Do not dump + referenced vars. + * cfgexpand.c (estimated_stack_frame_size): Walk over local + decls instead of referenced vars. + * tree-ssa.c (delete_tree_ssa): Simplify. + * tree-tailcall.c (find_tail_calls): Walk over local decls + instead of referenced vars. + (add_virtual_phis): Remove. + (tree_optimize_tail_calls_1): Instead mark the virtual operand + for renaming. + 2012-07-20 Steven Bosscher <steven@gcc.gnu.org> * basic-block.h (BB_FLAGS_TO_PRESERVE): New define. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index b767fe63ef8..96c2e2ed8a2 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1420,15 +1420,14 @@ estimated_stack_frame_size (struct cgraph_node *node) size_t i; tree var; tree old_cur_fun_decl = current_function_decl; - referenced_var_iterator rvi; struct function *fn = DECL_STRUCT_FUNCTION (node->symbol.decl); current_function_decl = node->symbol.decl; push_cfun (fn); - gcc_checking_assert (gimple_referenced_vars (fn)); - FOR_EACH_REFERENCED_VAR (fn, var, rvi) - size += expand_one_var (var, true, false); + FOR_EACH_LOCAL_DECL (fn, i, var) + if (auto_var_in_fn_p (var, fn->decl)) + size += expand_one_var (var, true, false); if (stack_vars_num > 0) { diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 7d20f6f1496..f8ebfd26972 100644 --- a/gcc/tree-dfa.c +++ b/gcc/tree-dfa.c @@ -371,17 +371,13 @@ static void collect_dfa_stats (struct dfa_stats_d *dfa_stats_p ATTRIBUTE_UNUSED) { basic_block bb; - referenced_var_iterator vi; - tree var; gcc_assert (dfa_stats_p); memset ((void *)dfa_stats_p, 0, sizeof (struct dfa_stats_d)); /* Count all the variable annotations. */ - FOR_EACH_REFERENCED_VAR (cfun, var, vi) - if (var_ann (var)) - dfa_stats_p->num_var_anns++; + dfa_stats_p->num_var_anns = htab_elements (gimple_referenced_vars (cfun)); /* Walk all the statements in the function counting references. */ FOR_EACH_BB (bb) diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index caf350632b1..5c229e94267 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -6736,9 +6736,6 @@ compute_may_aliases (void) /* But still dump what we have remaining it. */ dump_alias_info (dump_file); - - if (dump_flags & TDF_DETAILS) - dump_referenced_vars (dump_file); } return 0; @@ -6751,12 +6748,7 @@ compute_may_aliases (void) /* Debugging dumps. */ if (dump_file) - { - dump_alias_info (dump_file); - - if (dump_flags & TDF_DETAILS) - dump_referenced_vars (dump_file); - } + dump_alias_info (dump_file); /* Deallocate memory used by aliasing data structures and the internal points-to solution. */ diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 36aaffdecc4..9acb0354941 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1156,13 +1156,8 @@ delete_tree_ssa (void) /* Remove annotations from every referenced local variable. */ FOR_EACH_REFERENCED_VAR (cfun, var, rvi) { - if (is_global_var (var)) - continue; - if (var_ann (var)) - { - ggc_free (var_ann (var)); - *DECL_VAR_ANN_PTR (var) = NULL; - } + ggc_free (var_ann (var)); + *DECL_VAR_ANN_PTR (var) = NULL; } htab_delete (gimple_referenced_vars (cfun)); cfun->gimple_df->referenced_vars = NULL; diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c index e2e51a45107..ec77c5fbeee 100644 --- a/gcc/tree-tailcall.c +++ b/gcc/tree-tailcall.c @@ -390,7 +390,6 @@ find_tail_calls (basic_block bb, struct tailcall **ret) basic_block abb; size_t idx; tree var; - referenced_var_iterator rvi; if (!single_succ_p (bb)) return; @@ -484,7 +483,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret) /* Make sure the tail invocation of this function does not refer to local variables. */ - FOR_EACH_REFERENCED_VAR (cfun, var, rvi) + FOR_EACH_LOCAL_DECL (cfun, idx, var) { if (TREE_CODE (var) != PARM_DECL && auto_var_in_fn_p (var, cfun->decl) @@ -872,36 +871,6 @@ eliminate_tail_call (struct tailcall *t) release_defs (call); } -/* Add phi nodes for the virtual operands defined in the function to the - header of the loop created by tail recursion elimination. - - Originally, we used to add phi nodes only for call clobbered variables, - as the value of the non-call clobbered ones obviously cannot be used - or changed within the recursive call. However, the local variables - from multiple calls now share the same location, so the virtual ssa form - requires us to say that the location dies on further iterations of the loop, - which requires adding phi nodes. -*/ -static void -add_virtual_phis (void) -{ - referenced_var_iterator rvi; - tree var; - - /* The problematic part is that there is no way how to know what - to put into phi nodes (there in fact does not have to be such - ssa name available). A solution would be to have an artificial - use/kill for all virtual operands in EXIT node. Unless we have - this, we cannot do much better than to rebuild the ssa form for - possibly affected virtual ssa names from scratch. */ - - FOR_EACH_REFERENCED_VAR (cfun, var, rvi) - { - if (!is_gimple_reg (var) && gimple_default_def (cfun, var) != NULL_TREE) - mark_sym_for_renaming (var); - } -} - /* Optimizes the tailcall described by T. If OPT_TAILCALLS is true, also mark the tailcalls for the sibcall optimization. */ @@ -1056,8 +1025,12 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls) if (changed) free_dominance_info (CDI_DOMINATORS); + /* Add phi nodes for the virtual operands defined in the function to the + header of the loop created by tail recursion elimination. Do so + by triggering the SSA renamer. */ if (phis_constructed) - add_virtual_phis (); + mark_sym_for_renaming (gimple_vop (cfun)); + if (changed) return TODO_cleanup_cfg | TODO_update_ssa_only_virtuals; return 0; |