diff options
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r-- | gcc/tree-ssa-strlen.c | 67 |
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 * |