Commit 7380e6ef by Jan Hubicka Committed by Jan Hubicka

cgraph.h (vector types for symtab_node): Add.


	* cgraph.h (vector types for symtab_node): Add.
	* ipa-reference.c (ipa_reference_write_optimization_summary): Update
	for new symtab encoder.
	(ipa_reference_read_optimization_summary): Likewise.
	* lto-cgraph.c (output_varpool): Remove.
	(input_cgraph_opt_summary): Take symtab nodes vector as argument.
	(LTO_cgraph_tags): Rename to ...
	(LTO_symtab_tags): ... this one; add LTO_symtab_variable.
	(lto_cgraph_encoder_new): Rename to ...
	(lto_symtab_encoder_new): ... this on.
	(lto_cgraph_encoder_encode): Rename to ...
	(lto_symtab_encoder_encode): ... this one.
	(lto_cgraph_encoder_delete): Rename to ...
	(lto_symtab_encoder_delete): ... this one.
	(lto_cgraph_encoder_deref): Rename to ...
	(lto_symtab_encoder_deref): ... this one.
	(lto_cgraph_encoder_encode_body_p): Rename to ...
	(lto_symtab_encoder_encode_body_p): ... this one.
	(lto_varpool_encoder_new, lto_varpool_encoder_delete,
	lto_varpool_encoder_encode, lto_varpool_encoder_lookup,
	lto_varpool_encoder_deref): Remove.
	(lto_varpool_encoder_encode_initializer_p): Rename to ...
	(lto_symtab_encoder_encode_initializer_p): ... this one.
	(lto_set_varpool_encoder_encode_initializer): Rename to ...
	(lto_set_symtab_encoder_encode_initializer): ... this one.
	(lto_output_edge): Update.
	(lto_output_node): Update.
	(lto_output_varpool_node): Update; stream out LTO_symtab_variable tag.
	(lto_output_ref): Drop varpool_encoder; update.
	(add_node_to): Update.
	(add_references): Update.
	(output_outgoing_cgraph_edges): Update.
	(output_refs): Update.	
	(compute_ltrans_boundary): Update.
	(output_cgraph): Update; output varpools too.
	(input_overwrite_node): Update.
	(output_varpool): Remove.
	(input_node): Update.
	(input_ref): Update.
	(input_edge): Update.
	(input_cgraph_1): Update; input varpool too; unify fixup code.
	(input_varpool_1): Remove.
	(input_refs): Update.
	(input_cgraph): Update.
	(output_node_opt_summary): Update.
	(input_cgraph_opt_section): Update.
	(input_cgraph_opt_summary): Update.
	* ipa-pure-const.c (pure_const_write_summary): Update.
	(pure_const_read_summary): Update.
	* lto-streamer-out.c (lto_write_tree): Update.
	(lto_output): Likewise.
	(produce_symtab): Update.
	(produce_asm_for_decls): Update.
	* ipa-inline-analysis.c (inline_read_section): Update.
	(inline_write_summary): Update.
	* ipa-prop.c (ipa_write_node_info): Update.
	(ipa_prop_read_section): Update.
	* lto-streamer.h (lto_cgraph_encoder_d): Rename to ...
	(lto_symtab_encoder_d): ... this one;  add initializer.
	(lto_cgraph_encoder_t): Rename to ...
	(lto_symtab_encoder_t): ... this one.
	(lto_cgraph_encoder_size): Rename to ...
	(lto_symtab_encoder_size): ... this one.
	(lto_varpool_encoder_d): ... remove.
	(lto_varpool_encoder_t): Remove.
	(lto_out_decl_state): Remove cgraph_node_encoder, varpool_node_encoder
	add symtab_node_encoder.
	(lto_file_decl_data): Likewise.
	(lto_cgraph_encoder_deref, lto_cgraph_encoder_lookup,
	lto_cgraph_encoder_new, lto_cgraph_encoder_encode, lto_cgraph_encoder_delete,
	lto_cgraph_encoder_encode_body_p, lto_varpool_encoder_encode_body_p,
	lto_varpool_encoder_deref, lto_varpool_encoder_lookup, lto_varpool_encoder_new,
	lto_varpool_encoder_encode, lto_varpool_encoder_delete,
	lto_varpool_encoder_encode_initializer_p): Remove.
	(lto_symtab_encoder_deref, lto_symtab_encoder_lookup,
	lto_symtab_encoder_t, lto_symtab_encoder_encode, lto_symtab_encoder_delete,
	lto_symtab_encoder_encode_body_p, lto_symtab_encoder_encode_initializer_p):
	New.

From-SVN: r190309
parent 46b496e9
2012-08-11 Jan Hubicka <jh@suse.cz>
* cgraph.h (vector types for symtab_node): Add.
* ipa-reference.c (ipa_reference_write_optimization_summary): Update
for new symtab encoder.
(ipa_reference_read_optimization_summary): Likewise.
* lto-cgraph.c (output_varpool): Remove.
(input_cgraph_opt_summary): Take symtab nodes vector as argument.
(LTO_cgraph_tags): Rename to ...
(LTO_symtab_tags): ... this one; add LTO_symtab_variable.
(lto_cgraph_encoder_new): Rename to ...
(lto_symtab_encoder_new): ... this on.
(lto_cgraph_encoder_encode): Rename to ...
(lto_symtab_encoder_encode): ... this one.
(lto_cgraph_encoder_delete): Rename to ...
(lto_symtab_encoder_delete): ... this one.
(lto_cgraph_encoder_deref): Rename to ...
(lto_symtab_encoder_deref): ... this one.
(lto_cgraph_encoder_encode_body_p): Rename to ...
(lto_symtab_encoder_encode_body_p): ... this one.
(lto_varpool_encoder_new, lto_varpool_encoder_delete,
lto_varpool_encoder_encode, lto_varpool_encoder_lookup,
lto_varpool_encoder_deref): Remove.
(lto_varpool_encoder_encode_initializer_p): Rename to ...
(lto_symtab_encoder_encode_initializer_p): ... this one.
(lto_set_varpool_encoder_encode_initializer): Rename to ...
(lto_set_symtab_encoder_encode_initializer): ... this one.
(lto_output_edge): Update.
(lto_output_node): Update.
(lto_output_varpool_node): Update; stream out LTO_symtab_variable tag.
(lto_output_ref): Drop varpool_encoder; update.
(add_node_to): Update.
(add_references): Update.
(output_outgoing_cgraph_edges): Update.
(output_refs): Update.
(compute_ltrans_boundary): Update.
(output_cgraph): Update; output varpools too.
(input_overwrite_node): Update.
(output_varpool): Remove.
(input_node): Update.
(input_ref): Update.
(input_edge): Update.
(input_cgraph_1): Update; input varpool too; unify fixup code.
(input_varpool_1): Remove.
(input_refs): Update.
(input_cgraph): Update.
(output_node_opt_summary): Update.
(input_cgraph_opt_section): Update.
(input_cgraph_opt_summary): Update.
* ipa-pure-const.c (pure_const_write_summary): Update.
(pure_const_read_summary): Update.
* lto-streamer-out.c (lto_write_tree): Update.
(lto_output): Likewise.
(produce_symtab): Update.
(produce_asm_for_decls): Update.
* ipa-inline-analysis.c (inline_read_section): Update.
(inline_write_summary): Update.
* ipa-prop.c (ipa_write_node_info): Update.
(ipa_prop_read_section): Update.
* lto-streamer.h (lto_cgraph_encoder_d): Rename to ...
(lto_symtab_encoder_d): ... this one; add initializer.
(lto_cgraph_encoder_t): Rename to ...
(lto_symtab_encoder_t): ... this one.
(lto_cgraph_encoder_size): Rename to ...
(lto_symtab_encoder_size): ... this one.
(lto_varpool_encoder_d): ... remove.
(lto_varpool_encoder_t): Remove.
(lto_out_decl_state): Remove cgraph_node_encoder, varpool_node_encoder
add symtab_node_encoder.
(lto_file_decl_data): Likewise.
(lto_cgraph_encoder_deref, lto_cgraph_encoder_lookup,
lto_cgraph_encoder_new, lto_cgraph_encoder_encode, lto_cgraph_encoder_delete,
lto_cgraph_encoder_encode_body_p, lto_varpool_encoder_encode_body_p,
lto_varpool_encoder_deref, lto_varpool_encoder_lookup, lto_varpool_encoder_new,
lto_varpool_encoder_encode, lto_varpool_encoder_delete,
lto_varpool_encoder_encode_initializer_p): Remove.
(lto_symtab_encoder_deref, lto_symtab_encoder_lookup,
lto_symtab_encoder_t, lto_symtab_encoder_encode, lto_symtab_encoder_delete,
lto_symtab_encoder_encode_body_p, lto_symtab_encoder_encode_initializer_p):
New.
2012-08-11 Uros Bizjak <ubizjak@gmail.com> 2012-08-11 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (isa): Add fma and fma4. * config/i386/i386.md (isa): Add fma and fma4.
......
...@@ -273,6 +273,10 @@ struct GTY(()) cgraph_node { ...@@ -273,6 +273,10 @@ struct GTY(()) cgraph_node {
unsigned tm_clone : 1; unsigned tm_clone : 1;
}; };
DEF_VEC_P(symtab_node);
DEF_VEC_ALLOC_P(symtab_node,heap);
DEF_VEC_ALLOC_P(symtab_node,gc);
typedef struct cgraph_node *cgraph_node_ptr; typedef struct cgraph_node *cgraph_node_ptr;
DEF_VEC_P(cgraph_node_ptr); DEF_VEC_P(cgraph_node_ptr);
......
...@@ -3053,13 +3053,13 @@ inline_read_section (struct lto_file_decl_data *file_data, const char *data, ...@@ -3053,13 +3053,13 @@ inline_read_section (struct lto_file_decl_data *file_data, const char *data,
unsigned int index; unsigned int index;
struct cgraph_node *node; struct cgraph_node *node;
struct inline_summary *info; struct inline_summary *info;
lto_cgraph_encoder_t encoder; lto_symtab_encoder_t encoder;
struct bitpack_d bp; struct bitpack_d bp;
struct cgraph_edge *e; struct cgraph_edge *e;
index = streamer_read_uhwi (&ib); index = streamer_read_uhwi (&ib);
encoder = file_data->cgraph_node_encoder; encoder = file_data->symtab_node_encoder;
node = lto_cgraph_encoder_deref (encoder, index); node = cgraph (lto_symtab_encoder_deref (encoder, index));
info = inline_summary (node); info = inline_summary (node);
info->estimated_stack_size info->estimated_stack_size
...@@ -3186,20 +3186,22 @@ inline_write_summary (cgraph_node_set set, ...@@ -3186,20 +3186,22 @@ inline_write_summary (cgraph_node_set set,
varpool_node_set vset ATTRIBUTE_UNUSED) varpool_node_set vset ATTRIBUTE_UNUSED)
{ {
struct cgraph_node *node; struct cgraph_node *node;
symtab_node snode;
struct output_block *ob = create_output_block (LTO_section_inline_summary); struct output_block *ob = create_output_block (LTO_section_inline_summary);
lto_cgraph_encoder_t encoder = ob->decl_state->cgraph_node_encoder; lto_symtab_encoder_t encoder = ob->decl_state->symtab_node_encoder;
unsigned int count = 0; unsigned int count = 0;
int i; int i;
for (i = 0; i < lto_cgraph_encoder_size (encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
if (lto_cgraph_encoder_deref (encoder, i)->analyzed) if (symtab_function_p (snode = lto_symtab_encoder_deref (encoder, i))
&& cgraph (snode)->analyzed)
count++; count++;
streamer_write_uhwi (ob, count); streamer_write_uhwi (ob, count);
for (i = 0; i < lto_cgraph_encoder_size (encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
node = lto_cgraph_encoder_deref (encoder, i); if (symtab_function_p (snode = lto_symtab_encoder_deref (encoder, i))
if (node->analyzed) && (node = cgraph (snode))->analyzed)
{ {
struct inline_summary *info = inline_summary (node); struct inline_summary *info = inline_summary (node);
struct bitpack_d bp; struct bitpack_d bp;
...@@ -3208,7 +3210,7 @@ inline_write_summary (cgraph_node_set set, ...@@ -3208,7 +3210,7 @@ inline_write_summary (cgraph_node_set set,
size_time_entry *e; size_time_entry *e;
struct condition *c; struct condition *c;
streamer_write_uhwi (ob, lto_cgraph_encoder_encode (encoder, node)); streamer_write_uhwi (ob, lto_symtab_encoder_encode (encoder, (symtab_node)node));
streamer_write_hwi (ob, info->estimated_self_stack_size); streamer_write_hwi (ob, info->estimated_self_stack_size);
streamer_write_hwi (ob, info->self_size); streamer_write_hwi (ob, info->self_size);
streamer_write_hwi (ob, info->self_time); streamer_write_hwi (ob, info->self_time);
......
...@@ -3303,14 +3303,14 @@ static void ...@@ -3303,14 +3303,14 @@ static void
ipa_write_node_info (struct output_block *ob, struct cgraph_node *node) ipa_write_node_info (struct output_block *ob, struct cgraph_node *node)
{ {
int node_ref; int node_ref;
lto_cgraph_encoder_t encoder; lto_symtab_encoder_t encoder;
struct ipa_node_params *info = IPA_NODE_REF (node); struct ipa_node_params *info = IPA_NODE_REF (node);
int j; int j;
struct cgraph_edge *e; struct cgraph_edge *e;
struct bitpack_d bp; struct bitpack_d bp;
encoder = ob->decl_state->cgraph_node_encoder; encoder = ob->decl_state->symtab_node_encoder;
node_ref = lto_cgraph_encoder_encode (encoder, node); node_ref = lto_symtab_encoder_encode (encoder, (symtab_node) node);
streamer_write_uhwi (ob, node_ref); streamer_write_uhwi (ob, node_ref);
bp = bitpack_create (ob->main_stream); bp = bitpack_create (ob->main_stream);
...@@ -3454,11 +3454,11 @@ ipa_prop_read_section (struct lto_file_decl_data *file_data, const char *data, ...@@ -3454,11 +3454,11 @@ ipa_prop_read_section (struct lto_file_decl_data *file_data, const char *data,
{ {
unsigned int index; unsigned int index;
struct cgraph_node *node; struct cgraph_node *node;
lto_cgraph_encoder_t encoder; lto_symtab_encoder_t encoder;
index = streamer_read_uhwi (&ib_main); index = streamer_read_uhwi (&ib_main);
encoder = file_data->cgraph_node_encoder; encoder = file_data->symtab_node_encoder;
node = lto_cgraph_encoder_deref (encoder, index); node = cgraph (lto_symtab_encoder_deref (encoder, index));
gcc_assert (node->analyzed); gcc_assert (node->analyzed);
ipa_read_node_info (&ib_main, node, data_in); ipa_read_node_info (&ib_main, node, data_in);
} }
......
...@@ -962,12 +962,12 @@ pure_const_write_summary (cgraph_node_set set, ...@@ -962,12 +962,12 @@ pure_const_write_summary (cgraph_node_set set,
struct bitpack_d bp; struct bitpack_d bp;
funct_state fs; funct_state fs;
int node_ref; int node_ref;
lto_cgraph_encoder_t encoder; lto_symtab_encoder_t encoder;
fs = get_function_state (node); fs = get_function_state (node);
encoder = ob->decl_state->cgraph_node_encoder; encoder = ob->decl_state->symtab_node_encoder;
node_ref = lto_cgraph_encoder_encode (encoder, node); node_ref = lto_symtab_encoder_encode (encoder, (symtab_node)node);
streamer_write_uhwi_stream (ob->main_stream, node_ref); streamer_write_uhwi_stream (ob->main_stream, node_ref);
/* Note that flags will need to be read in the opposite /* Note that flags will need to be read in the opposite
...@@ -1015,12 +1015,12 @@ pure_const_read_summary (void) ...@@ -1015,12 +1015,12 @@ pure_const_read_summary (void)
struct cgraph_node *node; struct cgraph_node *node;
struct bitpack_d bp; struct bitpack_d bp;
funct_state fs; funct_state fs;
lto_cgraph_encoder_t encoder; lto_symtab_encoder_t encoder;
fs = XCNEW (struct funct_state_d); fs = XCNEW (struct funct_state_d);
index = streamer_read_uhwi (ib); index = streamer_read_uhwi (ib);
encoder = file_data->cgraph_node_encoder; encoder = file_data->symtab_node_encoder;
node = lto_cgraph_encoder_deref (encoder, index); node = cgraph (lto_symtab_encoder_deref (encoder, index));
set_function_state (node, fs); set_function_state (node, fs);
/* Note that the flags must be read in the opposite /* Note that the flags must be read in the opposite
......
...@@ -1029,21 +1029,25 @@ ipa_reference_write_optimization_summary (cgraph_node_set set, ...@@ -1029,21 +1029,25 @@ ipa_reference_write_optimization_summary (cgraph_node_set set,
varpool_node_set vset) varpool_node_set vset)
{ {
struct cgraph_node *node; struct cgraph_node *node;
symtab_node snode;
struct lto_simple_output_block *ob struct lto_simple_output_block *ob
= lto_create_simple_output_block (LTO_section_ipa_reference); = lto_create_simple_output_block (LTO_section_ipa_reference);
unsigned int count = 0; unsigned int count = 0;
int ltrans_statics_bitcount = 0; int ltrans_statics_bitcount = 0;
lto_cgraph_encoder_t encoder = ob->decl_state->cgraph_node_encoder; lto_symtab_encoder_t encoder = ob->decl_state->symtab_node_encoder;
lto_varpool_encoder_t varpool_encoder = ob->decl_state->varpool_node_encoder;
bitmap ltrans_statics = BITMAP_ALLOC (NULL); bitmap ltrans_statics = BITMAP_ALLOC (NULL);
int i; int i;
reference_vars_to_consider = splay_tree_new (splay_tree_compare_ints, 0, 0); reference_vars_to_consider = splay_tree_new (splay_tree_compare_ints, 0, 0);
/* See what variables we are interested in. */ /* See what variables we are interested in. */
for (i = 0; i < lto_varpool_encoder_size (varpool_encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
struct varpool_node *vnode = lto_varpool_encoder_deref (varpool_encoder, i); struct varpool_node *vnode;
snode = lto_symtab_encoder_deref (encoder, i);
if (!symtab_variable_p (snode))
continue;
vnode = varpool (snode);
if (bitmap_bit_p (all_module_statics, DECL_UID (vnode->symbol.decl)) if (bitmap_bit_p (all_module_statics, DECL_UID (vnode->symbol.decl))
&& referenced_from_this_partition_p (&vnode->symbol.ref_list, set, vset)) && referenced_from_this_partition_p (&vnode->symbol.ref_list, set, vset))
{ {
...@@ -1057,8 +1061,9 @@ ipa_reference_write_optimization_summary (cgraph_node_set set, ...@@ -1057,8 +1061,9 @@ ipa_reference_write_optimization_summary (cgraph_node_set set,
if (ltrans_statics_bitcount) if (ltrans_statics_bitcount)
for (i = 0; i < lto_cgraph_encoder_size (encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
if (write_node_summary_p (lto_cgraph_encoder_deref (encoder, i), if (symtab_function_p (snode = lto_symtab_encoder_deref (encoder, i))
&& write_node_summary_p (cgraph (snode),
set, vset, ltrans_statics)) set, vset, ltrans_statics))
count++; count++;
...@@ -1069,16 +1074,19 @@ ipa_reference_write_optimization_summary (cgraph_node_set set, ...@@ -1069,16 +1074,19 @@ ipa_reference_write_optimization_summary (cgraph_node_set set,
/* Process all of the functions. */ /* Process all of the functions. */
if (ltrans_statics_bitcount) if (ltrans_statics_bitcount)
for (i = 0; i < lto_cgraph_encoder_size (encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
node = lto_cgraph_encoder_deref (encoder, i); snode = lto_symtab_encoder_deref (encoder, i);
if (!symtab_function_p (snode))
continue;
node = cgraph (snode);
if (write_node_summary_p (node, set, vset, ltrans_statics)) if (write_node_summary_p (node, set, vset, ltrans_statics))
{ {
ipa_reference_optimization_summary_t info; ipa_reference_optimization_summary_t info;
int node_ref; int node_ref;
info = get_reference_optimization_summary (node); info = get_reference_optimization_summary (node);
node_ref = lto_cgraph_encoder_encode (encoder, node); node_ref = lto_symtab_encoder_encode (encoder, (symtab_node) node);
streamer_write_uhwi_stream (ob->main_stream, node_ref); streamer_write_uhwi_stream (ob->main_stream, node_ref);
stream_out_bitmap (ob, info->statics_not_read, ltrans_statics, stream_out_bitmap (ob, info->statics_not_read, ltrans_statics,
...@@ -1144,11 +1152,11 @@ ipa_reference_read_optimization_summary (void) ...@@ -1144,11 +1152,11 @@ ipa_reference_read_optimization_summary (void)
struct cgraph_node *node; struct cgraph_node *node;
ipa_reference_optimization_summary_t info; ipa_reference_optimization_summary_t info;
int v_count; int v_count;
lto_cgraph_encoder_t encoder; lto_symtab_encoder_t encoder;
index = streamer_read_uhwi (ib); index = streamer_read_uhwi (ib);
encoder = file_data->cgraph_node_encoder; encoder = file_data->symtab_node_encoder;
node = lto_cgraph_encoder_deref (encoder, index); node = cgraph (lto_symtab_encoder_deref (encoder, index));
info = XCNEW (struct ipa_reference_optimization_summary_d); info = XCNEW (struct ipa_reference_optimization_summary_d);
set_reference_optimization_summary (node, info); set_reference_optimization_summary (node, info);
info->statics_not_read = BITMAP_ALLOC (&optimization_summary_obstack); info->statics_not_read = BITMAP_ALLOC (&optimization_summary_obstack);
......
...@@ -348,13 +348,13 @@ lto_write_tree (struct output_block *ob, tree expr, bool ref_p) ...@@ -348,13 +348,13 @@ lto_write_tree (struct output_block *ob, tree expr, bool ref_p)
&& (TREE_STATIC (expr) || DECL_EXTERNAL (expr)) && (TREE_STATIC (expr) || DECL_EXTERNAL (expr))
&& initial) && initial)
{ {
lto_varpool_encoder_t varpool_encoder; lto_symtab_encoder_t encoder;
struct varpool_node *vnode; struct varpool_node *vnode;
varpool_encoder = ob->decl_state->varpool_node_encoder; encoder = ob->decl_state->symtab_node_encoder;
vnode = varpool_get_node (expr); vnode = varpool_get_node (expr);
if (!vnode if (!vnode
|| !lto_varpool_encoder_encode_initializer_p (varpool_encoder, || !lto_symtab_encoder_encode_initializer_p (encoder,
vnode)) vnode))
initial = error_mark_node; initial = error_mark_node;
} }
...@@ -983,17 +983,20 @@ lto_output (cgraph_node_set set, varpool_node_set vset) ...@@ -983,17 +983,20 @@ lto_output (cgraph_node_set set, varpool_node_set vset)
bitmap output = lto_bitmap_alloc (); bitmap output = lto_bitmap_alloc ();
#endif #endif
int i, n_nodes; int i, n_nodes;
lto_cgraph_encoder_t encoder = lto_get_out_decl_state ()->cgraph_node_encoder; lto_symtab_encoder_t encoder = lto_get_out_decl_state ()->symtab_node_encoder;
/* Initialize the streamer. */ /* Initialize the streamer. */
lto_streamer_init (); lto_streamer_init ();
n_nodes = lto_cgraph_encoder_size (encoder); n_nodes = lto_symtab_encoder_size (encoder);
/* Process only the functions with bodies. */ /* Process only the functions with bodies. */
for (i = 0; i < n_nodes; i++) for (i = 0; i < n_nodes; i++)
{ {
node = lto_cgraph_encoder_deref (encoder, i); symtab_node snode = lto_symtab_encoder_deref (encoder, i);
if (lto_cgraph_encoder_encode_body_p (encoder, node) if (!symtab_function_p (snode))
continue;
node = cgraph (snode);
if (lto_symtab_encoder_encode_body_p (encoder, node)
&& !node->alias && !node->alias
&& !node->thunk.thunk_p) && !node->thunk.thunk_p)
{ {
...@@ -1290,8 +1293,7 @@ produce_symtab (struct output_block *ob) ...@@ -1290,8 +1293,7 @@ produce_symtab (struct output_block *ob)
struct cgraph_node *node; struct cgraph_node *node;
struct varpool_node *vnode; struct varpool_node *vnode;
struct lto_output_stream stream; struct lto_output_stream stream;
lto_varpool_encoder_t varpool_encoder = ob->decl_state->varpool_node_encoder; lto_symtab_encoder_t encoder = ob->decl_state->symtab_node_encoder;
lto_cgraph_encoder_t encoder = ob->decl_state->cgraph_node_encoder;
int i; int i;
lto_begin_section (section_name, false); lto_begin_section (section_name, false);
...@@ -1303,9 +1305,11 @@ produce_symtab (struct output_block *ob) ...@@ -1303,9 +1305,11 @@ produce_symtab (struct output_block *ob)
/* Write all functions. /* Write all functions.
First write all defined functions and then write all used functions. First write all defined functions and then write all used functions.
This is done so only to handle duplicated symbols in cgraph. */ This is done so only to handle duplicated symbols in cgraph. */
for (i = 0; i < lto_cgraph_encoder_size (encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
node = lto_cgraph_encoder_deref (encoder, i); if (!symtab_function_p (lto_symtab_encoder_deref (encoder, i)))
continue;
node = cgraph (lto_symtab_encoder_deref (encoder, i));
if (DECL_EXTERNAL (node->symbol.decl)) if (DECL_EXTERNAL (node->symbol.decl))
continue; continue;
if (DECL_COMDAT (node->symbol.decl) if (DECL_COMDAT (node->symbol.decl)
...@@ -1315,9 +1319,11 @@ produce_symtab (struct output_block *ob) ...@@ -1315,9 +1319,11 @@ produce_symtab (struct output_block *ob)
continue; continue;
write_symbol (cache, &stream, node->symbol.decl, seen, false); write_symbol (cache, &stream, node->symbol.decl, seen, false);
} }
for (i = 0; i < lto_cgraph_encoder_size (encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
node = lto_cgraph_encoder_deref (encoder, i); if (!symtab_function_p (lto_symtab_encoder_deref (encoder, i)))
continue;
node = cgraph (lto_symtab_encoder_deref (encoder, i));
if (!DECL_EXTERNAL (node->symbol.decl)) if (!DECL_EXTERNAL (node->symbol.decl))
continue; continue;
/* We keep around unused extern inlines in order to be able to inline /* We keep around unused extern inlines in order to be able to inline
...@@ -1334,9 +1340,11 @@ produce_symtab (struct output_block *ob) ...@@ -1334,9 +1340,11 @@ produce_symtab (struct output_block *ob)
} }
/* Write all variables. */ /* Write all variables. */
for (i = 0; i < lto_varpool_encoder_size (varpool_encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
vnode = lto_varpool_encoder_deref (varpool_encoder, i); if (!symtab_variable_p (lto_symtab_encoder_deref (encoder, i)))
continue;
vnode = varpool (lto_symtab_encoder_deref (encoder, i));
if (DECL_EXTERNAL (vnode->symbol.decl)) if (DECL_EXTERNAL (vnode->symbol.decl))
continue; continue;
/* COMDAT virtual tables can be unshared. Do not declare them /* COMDAT virtual tables can be unshared. Do not declare them
...@@ -1351,9 +1359,11 @@ produce_symtab (struct output_block *ob) ...@@ -1351,9 +1359,11 @@ produce_symtab (struct output_block *ob)
continue; continue;
write_symbol (cache, &stream, vnode->symbol.decl, seen, false); write_symbol (cache, &stream, vnode->symbol.decl, seen, false);
} }
for (i = 0; i < lto_varpool_encoder_size (varpool_encoder); i++) for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{ {
vnode = lto_varpool_encoder_deref (varpool_encoder, i); if (!symtab_variable_p (lto_symtab_encoder_deref (encoder, i)))
continue;
vnode = varpool (lto_symtab_encoder_deref (encoder, i));
if (!DECL_EXTERNAL (vnode->symbol.decl)) if (!DECL_EXTERNAL (vnode->symbol.decl))
continue; continue;
if (DECL_COMDAT (vnode->symbol.decl) if (DECL_COMDAT (vnode->symbol.decl)
...@@ -1482,8 +1492,7 @@ produce_asm_for_decls (cgraph_node_set set ATTRIBUTE_UNUSED, ...@@ -1482,8 +1492,7 @@ produce_asm_for_decls (cgraph_node_set set ATTRIBUTE_UNUSED,
VEC_index (lto_out_decl_state_ptr, lto_function_decl_states, idx); VEC_index (lto_out_decl_state_ptr, lto_function_decl_states, idx);
lto_delete_out_decl_state (fn_out_state); lto_delete_out_decl_state (fn_out_state);
} }
lto_cgraph_encoder_delete (ob->decl_state->cgraph_node_encoder); lto_symtab_encoder_delete (ob->decl_state->symtab_node_encoder);
lto_varpool_encoder_delete (ob->decl_state->varpool_node_encoder);
VEC_free (lto_out_decl_state_ptr, heap, lto_function_decl_states); VEC_free (lto_out_decl_state_ptr, heap, lto_function_decl_states);
lto_function_decl_states = NULL; lto_function_decl_states = NULL;
destroy_output_block (ob); destroy_output_block (ob);
......
...@@ -423,49 +423,28 @@ struct lto_stats_d ...@@ -423,49 +423,28 @@ struct lto_stats_d
}; };
/* Encoder data structure used to stream callgraph nodes. */ /* Encoder data structure used to stream callgraph nodes. */
struct lto_cgraph_encoder_d struct lto_symtab_encoder_d
{ {
/* Map nodes to reference number. */ /* Map nodes to reference number. */
struct pointer_map_t *map; struct pointer_map_t *map;
/* Map reference number to node. */ /* Map reference number to node. */
VEC(cgraph_node_ptr,heap) *nodes; VEC(symtab_node,heap) *nodes;
/* Map of nodes where we want to output body. */ /* Map of nodes where we want to output body. */
struct pointer_set_t *body; struct pointer_set_t *body;
};
typedef struct lto_cgraph_encoder_d *lto_cgraph_encoder_t;
/* Return number of encoded nodes in ENCODER. */
static inline int
lto_cgraph_encoder_size (lto_cgraph_encoder_t encoder)
{
return VEC_length (cgraph_node_ptr, encoder->nodes);
}
/* Encoder data structure used to stream callgraph nodes. */
struct lto_varpool_encoder_d
{
/* Map nodes to reference number. */
struct pointer_map_t *map;
/* Map reference number to node. */
VEC(varpool_node_ptr,heap) *nodes;
/* Map of nodes where we want to output initializer. */ /* Map of nodes where we want to output initializer. */
struct pointer_set_t *initializer; struct pointer_set_t *initializer;
}; };
typedef struct lto_varpool_encoder_d *lto_varpool_encoder_t;
typedef struct lto_symtab_encoder_d *lto_symtab_encoder_t;
/* Return number of encoded nodes in ENCODER. */ /* Return number of encoded nodes in ENCODER. */
static inline int static inline int
lto_varpool_encoder_size (lto_varpool_encoder_t encoder) lto_symtab_encoder_size (lto_symtab_encoder_t encoder)
{ {
return VEC_length (varpool_node_ptr, encoder->nodes); return VEC_length (symtab_node, encoder->nodes);
} }
/* Mapping from indices to trees. */ /* Mapping from indices to trees. */
...@@ -520,10 +499,7 @@ struct lto_out_decl_state ...@@ -520,10 +499,7 @@ struct lto_out_decl_state
struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS]; struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS];
/* Encoder for cgraph nodes. */ /* Encoder for cgraph nodes. */
lto_cgraph_encoder_t cgraph_node_encoder; lto_symtab_encoder_t symtab_node_encoder;
/* Encoder for varpool nodes. */
lto_varpool_encoder_t varpool_node_encoder;
/* If this out-decl state belongs to a function, fn_decl points to that /* If this out-decl state belongs to a function, fn_decl points to that
function. Otherwise, it is NULL. */ function. Otherwise, it is NULL. */
...@@ -549,10 +525,7 @@ struct GTY(()) lto_file_decl_data ...@@ -549,10 +525,7 @@ struct GTY(()) lto_file_decl_data
struct lto_in_decl_state *global_decl_state; struct lto_in_decl_state *global_decl_state;
/* Table of cgraph nodes present in this file. */ /* Table of cgraph nodes present in this file. */
lto_cgraph_encoder_t GTY((skip)) cgraph_node_encoder; lto_symtab_encoder_t GTY((skip)) symtab_node_encoder;
/* Table of varpool nodes present in this file. */
lto_varpool_encoder_t GTY((skip)) varpool_node_encoder;
/* Hash table maps lto-related section names to location in file. */ /* Hash table maps lto-related section names to location in file. */
htab_t GTY((param_is (struct lto_in_decl_state))) function_decl_states; htab_t GTY((param_is (struct lto_in_decl_state))) function_decl_states;
...@@ -837,22 +810,15 @@ void lto_output_location (struct output_block *, location_t); ...@@ -837,22 +810,15 @@ void lto_output_location (struct output_block *, location_t);
/* In lto-cgraph.c */ /* In lto-cgraph.c */
struct cgraph_node *lto_cgraph_encoder_deref (lto_cgraph_encoder_t, int); symtab_node lto_symtab_encoder_deref (lto_symtab_encoder_t, int);
int lto_cgraph_encoder_lookup (lto_cgraph_encoder_t, struct cgraph_node *); int lto_symtab_encoder_lookup (lto_symtab_encoder_t, symtab_node);
lto_cgraph_encoder_t lto_cgraph_encoder_new (void); lto_symtab_encoder_t lto_symtab_encoder_new (void);
int lto_cgraph_encoder_encode (lto_cgraph_encoder_t, struct cgraph_node *); int lto_symtab_encoder_encode (lto_symtab_encoder_t, symtab_node);
void lto_cgraph_encoder_delete (lto_cgraph_encoder_t); void lto_symtab_encoder_delete (lto_symtab_encoder_t);
bool lto_cgraph_encoder_encode_body_p (lto_cgraph_encoder_t, bool lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t,
struct cgraph_node *); struct cgraph_node *);
bool lto_varpool_encoder_encode_body_p (lto_varpool_encoder_t, bool lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t,
struct varpool_node *);
struct varpool_node *lto_varpool_encoder_deref (lto_varpool_encoder_t, int);
int lto_varpool_encoder_lookup (lto_varpool_encoder_t, struct varpool_node *);
lto_varpool_encoder_t lto_varpool_encoder_new (void);
int lto_varpool_encoder_encode (lto_varpool_encoder_t, struct varpool_node *);
void lto_varpool_encoder_delete (lto_varpool_encoder_t);
bool lto_varpool_encoder_encode_initializer_p (lto_varpool_encoder_t,
struct varpool_node *); struct varpool_node *);
void output_cgraph (cgraph_node_set, varpool_node_set); void output_cgraph (cgraph_node_set, varpool_node_set);
void input_cgraph (void); void input_cgraph (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment