diff options
author | Trevor Saunders <tsaunders@mozilla.com> | 2013-09-18 02:39:50 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2013-09-17 20:39:50 -0600 |
commit | 4d9192b50c325156ab000884a57a3d7cfe4f79c6 (patch) | |
tree | 20df7a9ff9e90aef22efdbedc2005fb546209870 /gcc/tree-ssa-dom.c | |
parent | 3b3cc26bcc127eceeb6d257313555fc2149cf6d4 (diff) | |
download | gcc-4d9192b50c325156ab000884a57a3d7cfe4f79c6.zip gcc-4d9192b50c325156ab000884a57a3d7cfe4f79c6.tar.gz gcc-4d9192b50c325156ab000884a57a3d7cfe4f79c6.tar.bz2 |
compare-elim.c (find_comparison_dom_walker): New class
* compare-elim.c (find_comparison_dom_walker): New class
(find_comparisons_in_bb): Rename to
find_comparison_dom_walker::before_dom_children
(find_comparisons): Adjust
* domwalk.c (walk_dominator_tree): Rename to dom_walker::walk, and
adjust.
(init_walk_dominator_tree, fini_walk_dominator_tree): Remove
* domwalk.h (dom_walk_data): Convert it To a class dom_walker.
(init_walk_dominator_tree): Remove declaration.
(fini_walk_dominator_tree): Remove declaration.
* fwprop.c (single_def_use_dom_walker): New class
(single_def_use_enter_block): Convert to
single_def_use_dom_walker::before_dom_children.
(single_def_use_leave_block): Convert to
single_def_use_dom_walker::after_dom_children.
(build_single_def_use_links): Adjust.
* gimple-ssa-strength-reduction.c (find_candidates_dom_walker): New
class.
(find_candidates_in_block): Convert to
find_candidates_dom_walker::before_dom_children.
(execute_strength_reduction): Adjust.
* graphite-sese-to-poly.c (struct bsc, build_sese_conditions): Remove.
(sese_dom_walker): New class.
(sese_dom_walker::sese_dom_walker): New constructor.
(sese_dom_walker::~sese_dom_walker): New destructor.
(build_sese_conditions_before): Convert to
sese_dom_walker::before_dom_children.
(build_sese_conditions_after): Convert to
sese_dom_walker::after_dom_children.
(build_poly_scop): Adjust
* tree-into-ssa.c (rewrite_dom_walker): New class
(rewrite_enter_block): Convert to
rewrite_dom_walker::before_dom_children.
(rewrite_leave_block): Convert to
rewrite_dom_walker::after_dom_children.
(rewrite_update_dom_walker): New class.
(rewrite_update_enter_block): Convert to
rewrite_update_dom_walker::before_dom_children.
(rewrite_update_leave_block): Convert to
rewrite_update_dom_walker::after_dom_children.
(rewrite_blocks, rewrite_into_ssa): Adjust.
(mark_def_dom_walker): New class.
(mark_def_dom_walker::mark_def_dom_walker): New constructor.
(mark_def_dom_walker::~mark_def_dom_walker): New destructor.
(mark_def_sites_blocks): Convert to
mark_def_dom_walker::before_dom_children.
(mark_def_site_blocks): Remove.
* tree-ssa-dom.c (dom_opt_dom_walker): New class.
(tree_ssa_dominator_optimize): Adjust.
(dom_thread_across_edge): Convert to method
dom_opt_dom_walker::thread_across_edge.
(dom_opt_enter_block): Convert to member function
dom_opt_dom_walker::before_dom_children.
(dom_opt_leave_block): Convert to member function
dom_opt_dom_walker::after_dom_children.
* tree-ssa-dse.c (dse_dom_walker): New class.
(dse_enter_block): Convert to member function
dse_dom_walker::before_dom_children.
(tree_ssa_dse): Adjust.
* tree-ssa-loop-im.c (invariantness_dom_walker): New class.
(determine_invariantness_stmt): Convert to method
invariantness_dom_walker::before_dom_children.
(determine_invariantness): Remove
(move_computations_dom_walker): New class.
(move_computations_stmt): Convert to method
move_computations_dom_walker::before_dom_children.
(move_computations, tree_ssa_lim): Adjust.
* tree-ssa-phiopt.c (nontrapping_dom_walker): new class
(nt_init_block): Make method
notrappping_dom_walker::before_dom_children.
(nt_fini_block): Make
method nontrapping_dom_walker::after_dom_children.
(get_non_trapping): Adjust.
* tree-ssa-pre.c (eliminate_dom_walker): New class.
(eliminate_bb): Make method eliminate_dom_walker::before_dom_children.
(eliminate_leave_block): Make method.
eliminate_dom_walker::after_dom_children.
(eliminate): Adjust
* tree-ssa-strlen.c (strlen_dom_walker): New class.
(strlen_enter_block): Make method
strlen_dom_walker::before_dom_children.
(strlen_leave_block): Make
method strlen_dom_walker::after_dom_children.
(tree_ssa_strlen): Adjust.
* tree-ssa-uncprop.c (uncprop_dom_walker): New class.
(tree_ssa_uncprop): Adjust.
(uncprop_leave_block): Make method
uncprop_dom_walker::after_dom_children.
(uncprop_leave_block): Make method
uncprop_dom_walker::before_dom_children.
From-SVN: r202679
Diffstat (limited to 'gcc/tree-ssa-dom.c')
-rw-r--r-- | gcc/tree-ssa-dom.c | 71 |
1 files changed, 30 insertions, 41 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 4a2b48b..aac7aa4 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -244,9 +244,6 @@ static void record_equivalences_from_phis (basic_block); static void record_equivalences_from_incoming_edge (basic_block); static void eliminate_redundant_computations (gimple_stmt_iterator *); static void record_equivalences_from_stmt (gimple, int); -static void dom_thread_across_edge (struct dom_walk_data *, edge); -static void dom_opt_leave_block (struct dom_walk_data *, basic_block); -static void dom_opt_enter_block (struct dom_walk_data *, basic_block); static void remove_local_expressions_from_table (void); static void restore_vars_to_original_value (void); static edge single_incoming_edge_ignoring_loop_edges (basic_block); @@ -773,6 +770,21 @@ free_all_edge_infos (void) } } +class dom_opt_dom_walker : public dom_walker +{ +public: + dom_opt_dom_walker (cdi_direction direction) + : dom_walker (direction), dummy_cond_ (NULL) {} + + virtual void before_dom_children (basic_block); + virtual void after_dom_children (basic_block); + +private: + void thread_across_edge (edge); + + gimple dummy_cond_; +}; + /* Jump threading, redundancy elimination and const/copy propagation. This pass may expose new symbols that need to be renamed into SSA. For @@ -782,8 +794,6 @@ free_all_edge_infos (void) static unsigned int tree_ssa_dominator_optimize (void) { - struct dom_walk_data walk_data; - memset (&opt_stats, 0, sizeof (opt_stats)); /* Create our hash tables. */ @@ -792,20 +802,6 @@ tree_ssa_dominator_optimize (void) const_and_copies_stack.create (20); need_eh_cleanup = BITMAP_ALLOC (NULL); - /* Setup callbacks for the generic dominator tree walker. */ - walk_data.dom_direction = CDI_DOMINATORS; - walk_data.initialize_block_local_data = NULL; - walk_data.before_dom_children = dom_opt_enter_block; - walk_data.after_dom_children = dom_opt_leave_block; - /* Right now we only attach a dummy COND_EXPR to the global data pointer. - When we attach more stuff we'll need to fill this out with a real - structure. */ - walk_data.global_data = NULL; - walk_data.block_local_data_size = 0; - - /* Now initialize the dominator walker. */ - init_walk_dominator_tree (&walk_data); - calculate_dominance_info (CDI_DOMINATORS); cfg_altered = false; @@ -824,7 +820,7 @@ tree_ssa_dominator_optimize (void) mark_dfs_back_edges (); /* Recursively walk the dominator tree optimizing statements. */ - walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR); + dom_opt_dom_walker (CDI_DOMINATORS).walk (cfun->cfg->x_entry_block_ptr); { gimple_stmt_iterator gsi; @@ -897,9 +893,6 @@ tree_ssa_dominator_optimize (void) /* Delete our main hashtable. */ avail_exprs.dispose (); - /* And finalize the dominator walker. */ - fini_walk_dominator_tree (&walk_data); - /* Free asserted bitmaps and stacks. */ BITMAP_FREE (need_eh_cleanup); @@ -1081,21 +1074,18 @@ simplify_stmt_for_jump_threading (gimple stmt, it handles lazily building the dummy condition and the bookkeeping when jump threading is successful. */ -static void -dom_thread_across_edge (struct dom_walk_data *walk_data, edge e) +void +dom_opt_dom_walker::thread_across_edge (edge e) { - if (! walk_data->global_data) - { - gimple dummy_cond = + if (! dummy_cond_) + dummy_cond_ = gimple_build_cond (NE_EXPR, integer_zero_node, integer_zero_node, NULL, NULL); - walk_data->global_data = dummy_cond; - } - thread_across_edge ((gimple) walk_data->global_data, e, false, - &const_and_copies_stack, - simplify_stmt_for_jump_threading); + ::thread_across_edge (dummy_cond_, e, false, + &const_and_copies_stack, + simplify_stmt_for_jump_threading); } /* PHI nodes can create equivalences too. @@ -1864,9 +1854,8 @@ record_edge_info (basic_block bb) } } -static void -dom_opt_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, - basic_block bb) +void +dom_opt_dom_walker::before_dom_children (basic_block bb) { gimple_stmt_iterator gsi; @@ -1903,8 +1892,8 @@ dom_opt_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, any finalization actions in preparation for leaving this node in the dominator tree. */ -static void -dom_opt_leave_block (struct dom_walk_data *walk_data, basic_block bb) +void +dom_opt_dom_walker::after_dom_children (basic_block bb) { gimple last; @@ -1919,7 +1908,7 @@ dom_opt_leave_block (struct dom_walk_data *walk_data, basic_block bb) /* Push a marker on the stack, which thread_across_edge expects and will remove. */ const_and_copies_stack.safe_push (NULL_TREE); - dom_thread_across_edge (walk_data, single_succ_edge (bb)); + thread_across_edge (single_succ_edge (bb)); } else if ((last = last_stmt (bb)) && gimple_code (last) == GIMPLE_COND @@ -1964,7 +1953,7 @@ dom_opt_leave_block (struct dom_walk_data *walk_data, basic_block bb) record_cond (eq); } - dom_thread_across_edge (walk_data, true_edge); + thread_across_edge (true_edge); /* And restore the various tables to their state before we threaded this edge. */ @@ -1999,7 +1988,7 @@ dom_opt_leave_block (struct dom_walk_data *walk_data, basic_block bb) } /* Now thread the edge. */ - dom_thread_across_edge (walk_data, false_edge); + thread_across_edge (false_edge); /* No need to remove local expressions from our tables or restore vars to their original value as that will |