From 8361d32fa8088a9b2a731aeec5ca7f50d167a013 Mon Sep 17 00:00:00 2001 From: marxin Date: Mon, 1 Jun 2015 12:50:36 +0000 Subject: [PATCH] Change use to type-based pool allocator in ipa-prop.c * ipa-cp.c (ipcp_value::add_source): Use new type-based pool allocator. (allocate_and_init_ipcp_value): Likewise. (ipcp_lattice::add_value): Likewise. (merge_agg_lats_step): Likewise. (ipcp_driver): Likewise. * ipa-prop.c (ipa_free_all_structures_after_ipa_cp): Likewise. (ipa_free_all_structures_after_iinln): Likewise. * ipa-prop.h: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223971 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 11 +++++++++++ gcc/ipa-cp.c | 37 +++++++++++++++++-------------------- gcc/ipa-prop.c | 20 ++++++++------------ gcc/ipa-prop.h | 19 +++++++++++++++---- 4 files changed, 51 insertions(+), 36 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da0d4974b86..85c274d0802 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2015-06-01 Martin Liska + * ipa-cp.c (ipcp_value::add_source): Use new type-based pool allocator. + (allocate_and_init_ipcp_value): Likewise. + (ipcp_lattice::add_value): Likewise. + (merge_agg_lats_step): Likewise. + (ipcp_driver): Likewise. + * ipa-prop.c (ipa_free_all_structures_after_ipa_cp): Likewise. + (ipa_free_all_structures_after_iinln): Likewise. + * ipa-prop.h: Likewise. + +2015-06-01 Martin Liska + * ipa-inline-analysis.c (edge_set_predicate): Use new type-based pool allocator. (set_hint_predicate): Likewise. (inline_summary_alloc): Likewise. diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 356f402fac4..9f812fa5f5d 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -291,10 +291,17 @@ public: /* Allocation pools for values and their sources in ipa-cp. */ -alloc_pool ipcp_cst_values_pool; -alloc_pool ipcp_poly_ctx_values_pool; -alloc_pool ipcp_sources_pool; -alloc_pool ipcp_agg_lattice_pool; +pool_allocator > ipcp_cst_values_pool + ("IPA-CP constant values", 32); + +pool_allocator > + ipcp_poly_ctx_values_pool ("IPA-CP polymorphic contexts", 32); + +pool_allocator > ipcp_sources_pool + ("IPA-CP value sources", 64); + +pool_allocator ipcp_agg_lattice_pool + ("IPA_CP aggregate lattices", 32); /* Maximal count found in program. */ @@ -1147,7 +1154,7 @@ ipcp_value::add_source (cgraph_edge *cs, ipcp_value *src_val, { ipcp_value_source *src; - src = new (pool_alloc (ipcp_sources_pool)) ipcp_value_source; + src = new (ipcp_sources_pool.allocate ()) ipcp_value_source; src->offset = offset; src->cs = cs; src->val = src_val; @@ -1165,7 +1172,7 @@ allocate_and_init_ipcp_value (tree source) { ipcp_value *val; - val = new (pool_alloc (ipcp_cst_values_pool)) ipcp_value; + val = ipcp_cst_values_pool.allocate (); memset (val, 0, sizeof (*val)); val->value = source; return val; @@ -1179,8 +1186,8 @@ allocate_and_init_ipcp_value (ipa_polymorphic_call_context source) { ipcp_value *val; - val = new (pool_alloc (ipcp_poly_ctx_values_pool)) - ipcp_value; + // TODO + val = ipcp_poly_ctx_values_pool.allocate (); memset (val, 0, sizeof (*val)); val->value = source; return val; @@ -1229,7 +1236,7 @@ ipcp_lattice::add_value (valtype newval, cgraph_edge *cs, { ipcp_value_source *src = val->sources; val->sources = src->next; - pool_free (ipcp_sources_pool, src); + ipcp_sources_pool.remove ((ipcp_value_source*)src); } } @@ -1599,7 +1606,7 @@ merge_agg_lats_step (struct ipcp_param_lattices *dest_plats, if (dest_plats->aggs_count == PARAM_VALUE (PARAM_IPA_MAX_AGG_ITEMS)) return false; dest_plats->aggs_count++; - new_al = (struct ipcp_agg_lattice *) pool_alloc (ipcp_agg_lattice_pool); + new_al = ipcp_agg_lattice_pool.allocate (); memset (new_al, 0, sizeof (*new_al)); new_al->offset = offset; @@ -4463,16 +4470,6 @@ ipcp_driver (void) edge_removal_hook_holder = symtab->add_edge_removal_hook (&ipcp_edge_removal_hook, NULL); - ipcp_cst_values_pool = create_alloc_pool ("IPA-CP constant values", - sizeof (ipcp_value), 32); - ipcp_poly_ctx_values_pool = create_alloc_pool - ("IPA-CP polymorphic contexts", - sizeof (ipcp_value), 32); - ipcp_sources_pool = create_alloc_pool ("IPA-CP value sources", - sizeof (ipcp_value_source), 64); - ipcp_agg_lattice_pool = create_alloc_pool ("IPA_CP aggregate lattices", - sizeof (struct ipcp_agg_lattice), - 32); if (dump_file) { fprintf (dump_file, "\nIPA structures before propagation:\n"); diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 80ce6b88e2b..e90502bca5a 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -3669,10 +3669,10 @@ ipa_free_all_structures_after_ipa_cp (void) { ipa_free_all_edge_args (); ipa_free_all_node_params (); - free_alloc_pool (ipcp_sources_pool); - free_alloc_pool (ipcp_cst_values_pool); - free_alloc_pool (ipcp_poly_ctx_values_pool); - free_alloc_pool (ipcp_agg_lattice_pool); + ipcp_sources_pool.release (); + ipcp_cst_values_pool.release (); + ipcp_poly_ctx_values_pool.release (); + ipcp_agg_lattice_pool.release (); ipa_unregister_cgraph_hooks (); ipa_refdesc_pool.release (); } @@ -3687,14 +3687,10 @@ ipa_free_all_structures_after_iinln (void) ipa_free_all_edge_args (); ipa_free_all_node_params (); ipa_unregister_cgraph_hooks (); - if (ipcp_sources_pool) - free_alloc_pool (ipcp_sources_pool); - if (ipcp_cst_values_pool) - free_alloc_pool (ipcp_cst_values_pool); - if (ipcp_poly_ctx_values_pool) - free_alloc_pool (ipcp_poly_ctx_values_pool); - if (ipcp_agg_lattice_pool) - free_alloc_pool (ipcp_agg_lattice_pool); + ipcp_sources_pool.release (); + ipcp_cst_values_pool.release (); + ipcp_poly_ctx_values_pool.release (); + ipcp_agg_lattice_pool.release (); ipa_refdesc_pool.release (); } diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 0488254492a..e6725aa332f 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -595,10 +595,21 @@ void ipa_print_node_jump_functions (FILE *f, struct cgraph_node *node); void ipa_print_all_jump_functions (FILE * f); void ipcp_verify_propagated_values (void); -extern alloc_pool ipcp_cst_values_pool; -extern alloc_pool ipcp_poly_ctx_values_pool; -extern alloc_pool ipcp_sources_pool; -extern alloc_pool ipcp_agg_lattice_pool; +template +class ipcp_value; + +extern pool_allocator > ipcp_cst_values_pool; +extern pool_allocator > + ipcp_poly_ctx_values_pool; + +template +class ipcp_value_source; + +extern pool_allocator > ipcp_sources_pool; + +class ipcp_agg_lattice; + +extern pool_allocator ipcp_agg_lattice_pool; /* Operation to be performed for the parameter in ipa_parm_adjustment below. */ -- 2.11.4.GIT