summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-strlen.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r--gcc/tree-ssa-strlen.c67
1 files changed, 30 insertions, 37 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c
index f55b7ee6dc8..1cc36d81e36 100644
--- a/gcc/tree-ssa-strlen.c
+++ b/gcc/tree-ssa-strlen.c
@@ -2061,40 +2061,6 @@ strlen_dom_walker::after_dom_children (basic_block bb)
/* Main entry point. */
-static unsigned int
-tree_ssa_strlen (void)
-{
- ssa_ver_to_stridx.safe_grow_cleared (num_ssa_names);
- max_stridx = 1;
- strinfo_pool = create_alloc_pool ("strinfo_struct pool",
- sizeof (struct strinfo_struct), 64);
-
- calculate_dominance_info (CDI_DOMINATORS);
-
- /* String length optimization is implemented as a walk of the dominator
- tree and a forward walk of statements within each block. */
- strlen_dom_walker (CDI_DOMINATORS).walk (cfun->cfg->x_entry_block_ptr);
-
- ssa_ver_to_stridx.release ();
- free_alloc_pool (strinfo_pool);
- if (decl_to_stridxlist_htab.is_created ())
- {
- obstack_free (&stridx_obstack, NULL);
- decl_to_stridxlist_htab.dispose ();
- }
- laststmt.stmt = NULL;
- laststmt.len = NULL_TREE;
- laststmt.stridx = 0;
-
- return 0;
-}
-
-static bool
-gate_strlen (void)
-{
- return flag_optimize_strlen != 0;
-}
-
namespace {
const pass_data pass_data_strlen =
@@ -2102,7 +2068,6 @@ const pass_data pass_data_strlen =
GIMPLE_PASS, /* type */
"strlen", /* name */
OPTGROUP_NONE, /* optinfo_flags */
- true, /* has_gate */
true, /* has_execute */
TV_TREE_STRLEN, /* tv_id */
( PROP_cfg | PROP_ssa ), /* properties_required */
@@ -2120,11 +2085,39 @@ public:
{}
/* opt_pass methods: */
- bool gate () { return gate_strlen (); }
- unsigned int execute () { return tree_ssa_strlen (); }
+ virtual bool gate (function *) { return flag_optimize_strlen != 0; }
+ virtual unsigned int execute (function *);
}; // class pass_strlen
+unsigned int
+pass_strlen::execute (function *fun)
+{
+ ssa_ver_to_stridx.safe_grow_cleared (num_ssa_names);
+ max_stridx = 1;
+ strinfo_pool = create_alloc_pool ("strinfo_struct pool",
+ sizeof (struct strinfo_struct), 64);
+
+ calculate_dominance_info (CDI_DOMINATORS);
+
+ /* String length optimization is implemented as a walk of the dominator
+ tree and a forward walk of statements within each block. */
+ strlen_dom_walker (CDI_DOMINATORS).walk (fun->cfg->x_entry_block_ptr);
+
+ ssa_ver_to_stridx.release ();
+ free_alloc_pool (strinfo_pool);
+ if (decl_to_stridxlist_htab.is_created ())
+ {
+ obstack_free (&stridx_obstack, NULL);
+ decl_to_stridxlist_htab.dispose ();
+ }
+ laststmt.stmt = NULL;
+ laststmt.len = NULL_TREE;
+ laststmt.stridx = 0;
+
+ return 0;
+}
+
} // anon namespace
gimple_opt_pass *