aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-sink.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-ssa-sink.c')
-rw-r--r--gcc/tree-ssa-sink.c47
1 files changed, 20 insertions, 27 deletions
diff --git a/gcc/tree-ssa-sink.c b/gcc/tree-ssa-sink.c
index 6803160..7992ced 100644
--- a/gcc/tree-ssa-sink.c
+++ b/gcc/tree-ssa-sink.c
@@ -563,31 +563,6 @@ sink_code_in_bb (basic_block bb)
Note that this reduces the number of computations of a = b + c to 1
when we take the else edge, instead of 2.
*/
-static void
-execute_sink_code (void)
-{
- loop_optimizer_init (LOOPS_NORMAL);
- split_critical_edges ();
- connect_infinite_loops_to_exit ();
- memset (&sink_stats, 0, sizeof (sink_stats));
- calculate_dominance_info (CDI_DOMINATORS);
- calculate_dominance_info (CDI_POST_DOMINATORS);
- sink_code_in_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
- statistics_counter_event (cfun, "Sunk statements", sink_stats.sunk);
- free_dominance_info (CDI_POST_DOMINATORS);
- remove_fake_exit_edges ();
- loop_optimizer_finalize ();
-}
-
-/* Gate and execute functions for PRE. */
-
-static unsigned int
-do_sink (void)
-{
- execute_sink_code ();
- return 0;
-}
-
namespace {
const pass_data pass_data_sink_code =
@@ -598,7 +573,7 @@ const pass_data pass_data_sink_code =
true, /* has_execute */
TV_TREE_SINK, /* tv_id */
/* PROP_no_crit_edges is ensured by running split_critical_edges in
- execute_sink_code. */
+ pass_data_sink_code::execute (). */
( PROP_cfg | PROP_ssa ), /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
@@ -616,10 +591,28 @@ public:
/* opt_pass methods: */
virtual bool gate (function *) { return flag_tree_sink != 0; }
- unsigned int execute () { return do_sink (); }
+ virtual unsigned int execute (function *);
}; // class pass_sink_code
+unsigned int
+pass_sink_code::execute (function *fun)
+{
+ loop_optimizer_init (LOOPS_NORMAL);
+ split_critical_edges ();
+ connect_infinite_loops_to_exit ();
+ memset (&sink_stats, 0, sizeof (sink_stats));
+ calculate_dominance_info (CDI_DOMINATORS);
+ calculate_dominance_info (CDI_POST_DOMINATORS);
+ sink_code_in_bb (EXIT_BLOCK_PTR_FOR_FN (fun));
+ statistics_counter_event (fun, "Sunk statements", sink_stats.sunk);
+ free_dominance_info (CDI_POST_DOMINATORS);
+ remove_fake_exit_edges ();
+ loop_optimizer_finalize ();
+
+ return 0;
+}
+
} // anon namespace
gimple_opt_pass *