From: hubicka Date: Mon, 10 May 2010 16:13:52 +0000 (+0000) Subject: * passes.c (ipa_write_summaries_1, ipa_write_optimization_summaries): Allocate X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=a33890d064f843e2d810f02b80c0e049df944e51 * passes.c (ipa_write_summaries_1, ipa_write_optimization_summaries): Allocate encoders. * lto-section-out.c (lto_new_out_decl_state): Do not allocate it here. * lto-streamer.c (lto_streamer_cache_insert_1): Use alloc pool. (lto_streamer_cache_create): Init alloc pool. (lto_streamer_cache_delete): Free alloc pool. * lto-streamer.h: Include alloc pool. (lto_streamer_cache_d): Use alloc pool. * lto-stramer-out.c (produce_asm_for_decls): Delete fn_out_states. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159230 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e7c6de39fb..b4b9a65d099 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,17 @@ 2010-05-10 Jan Hubicka + * passes.c (ipa_write_summaries_1, ipa_write_optimization_summaries): Allocate + encoders. + * lto-section-out.c (lto_new_out_decl_state): Do not allocate it here. + * lto-streamer.c (lto_streamer_cache_insert_1): Use alloc pool. + (lto_streamer_cache_create): Init alloc pool. + (lto_streamer_cache_delete): Free alloc pool. + * lto-streamer.h: Include alloc pool. + (lto_streamer_cache_d): Use alloc pool. + * lto-stramer-out.c (produce_asm_for_decls): Delete fn_out_states. + +2010-05-10 Jan Hubicka + * Makefile.in (cgraphbuild.o): Add dependency on except.h. * cgraphbuild.c: Include except.h (record_type_list, record_eh_tables): New function. diff --git a/gcc/lto-section-out.c b/gcc/lto-section-out.c index 8bcbdd7e0e7..b5353f34af2 100644 --- a/gcc/lto-section-out.c +++ b/gcc/lto-section-out.c @@ -542,9 +542,6 @@ lto_new_out_decl_state (void) lto_init_tree_ref_encoder (&state->streams[i], hash_fn, eq_fn); } - state->cgraph_node_encoder = lto_cgraph_encoder_new (); - state->varpool_node_encoder = lto_varpool_encoder_new (); - return state; } diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index cffaee58f8b..86f2c73aac9 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -2505,6 +2505,7 @@ produce_asm_for_decls (cgraph_node_set set, varpool_node_set vset) fn_out_state = VEC_index (lto_out_decl_state_ptr, lto_function_decl_states, idx); lto_output_decl_state_refs (ob, decl_state_stream, fn_out_state); + lto_delete_out_decl_state (fn_out_state); } lto_write_stream (decl_state_stream); free(decl_state_stream); diff --git a/gcc/lto-streamer.c b/gcc/lto-streamer.c index 01703f1a981..0ae7c0c6196 100644 --- a/gcc/lto-streamer.c +++ b/gcc/lto-streamer.c @@ -500,7 +500,7 @@ lto_streamer_cache_insert_1 (struct lto_streamer_cache_d *cache, else ix = *ix_p; - entry = XCNEW (struct tree_int_map); + entry = (struct tree_int_map *)pool_alloc (cache->node_map_entries); entry->base.from = t; entry->to = (unsigned) ix; *slot = entry; @@ -762,6 +762,10 @@ lto_streamer_cache_create (void) cache->node_map = htab_create (101, tree_int_map_hash, tree_int_map_eq, NULL); + cache->node_map_entries = create_alloc_pool ("node map", + sizeof (struct tree_int_map), + 100); + /* Load all the well-known tree nodes that are always created by the compiler on startup. This prevents writing them out unnecessarily. */ @@ -785,6 +789,7 @@ lto_streamer_cache_delete (struct lto_streamer_cache_d *c) return; htab_delete (c->node_map); + free_alloc_pool (c->node_map_entries); VEC_free (tree, gc, c->nodes); VEC_free (unsigned, heap, c->offsets); free (c); diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index 4f3d60d8993..65e2b3f4c75 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "cgraph.h" #include "vec.h" #include "vecprim.h" +#include "alloc-pool.h" /* Define when debugging the LTO streamer. This causes the writer to output the numeric value for the memory address of the tree node @@ -346,6 +347,9 @@ struct lto_streamer_cache_d /* The mapping between tree nodes and slots into the nodes array. */ htab_t node_map; + /* Node map to store entries into. */ + alloc_pool node_map_entries; + /* Next available slot in the nodes and offsets arrays. */ unsigned next_slot; diff --git a/gcc/passes.c b/gcc/passes.c index f482437e79d..c087750cc19 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1694,6 +1694,9 @@ static void ipa_write_summaries_1 (cgraph_node_set set, varpool_node_set vset) { struct lto_out_decl_state *state = lto_new_out_decl_state (); + state->cgraph_node_encoder = lto_cgraph_encoder_new (); + state->varpool_node_encoder = lto_varpool_encoder_new (); + lto_push_out_decl_state (state); gcc_assert (!flag_wpa); @@ -1805,6 +1808,8 @@ void ipa_write_optimization_summaries (cgraph_node_set set, varpool_node_set vset) { struct lto_out_decl_state *state = lto_new_out_decl_state (); + state->cgraph_node_encoder = lto_cgraph_encoder_new (); + state->varpool_node_encoder = lto_varpool_encoder_new (); lto_push_out_decl_state (state); gcc_assert (flag_wpa);