diff options
author | Jan Hubicka <jh@suse.cz> | 2012-08-13 02:37:51 +0000 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2012-08-13 02:37:51 +0000 |
commit | 771c9af4943e8ab9402eec0db82addd7790a86f5 (patch) | |
tree | 45f40f7cd77f92dcd298eb5c790cad79a92c02be /gcc/lto-streamer.h | |
parent | 7df87b451bbc0fadb0262808f01e2f78b0e5efbb (diff) |
* tree-pass.h (write_summary, write_optimization_summary): Remove
set and vset arguments.
* ipa-cp.c (ipcp_write_summary): Remove set and vset arugments.
(write_node_summary_p): Likewise; use the encoder.
(ipa_reference_write_optimization_summary): Likewise.
* lto-cgraph.c (output_cgraph_opt_summary): Use encoder.
(lto_symtab_encoder_new): Initialize in_partition field.
(lto_symtab_encoder_delete): Destroy in_partition field.
(LCC_NOT_FOUND): Move to lto-streamer.h
(lto_symtab_encoder_deref): Likewise.
(lto_symtab_encoder_in_partition_p,
lto_set_symtab_encoder_in_partition): New functions.
(referenced_from_other_partition_p): Rewrite to use encoder.
(reachable_from_other_partition_p): Likewise.
(referenced_from_this_partition_p): Likewise.
(reachable_from_this_partition_p): Likewise.
(lto_output_node): Likewise.
(lto_output_varpool_node): Likewise.
(output_refs): Likewise.
(compute_ltrans_boundary): Initialize in_partition fileds of
the encoder.
(output_symtab): Likewise.
(input_refs): Match the changes in output_refs.
(output_cgraph_opt_summary_p): Remove set argument.
(output_node_opt_summary): Replace set by encoder.
(output_cgraph_opt_summary): Remove set argument; use
the encoder.
* ipa-pure-const.c (pure_const_write_summary): Remove set and vset
arguments; use the encoder.
* lto-streamer-out.c (lto_output): Remove set and vset argument; use
the encoder.
(produce_symtab): Likewise.
* ipa-inline.h (inline_write_summary): Remove set and vset arguments.
* ipa-inline-analysis.c (inline_write_summary): Likewise.
* ipa-prop.c (ipa_prop_write_jump_functions): Remove set argument;
use encoder.
* ipa-prop.h (ipa_prop_write_jump_functions): Likewise.
* passes.c (ipa_write_summaries_2): Remove set and vset arguments.
(ipa_write_summaries_1): Update.
(ipa_write_optimization_summaries_1): Likewise.
(ipa_write_optimization_summaries): Likewise.
* lto-streamer.h (lto_symtab_encoder_t): Add in_partition.
(lto_symtab_encoder_iterator): New type.
(lto_symtab_encoder_deref): Make inline.
(output_symtab, referenced_from_other_partition_p,
reachable_from_other_partition_p, referenced_from_this_partition_p,
reachable_from_this_partition_p): Update.
(lsei_end_p, lsei_next, lsei_node, lsei_cgraph_node, lsei_varpool_node): New
inline functions.
(LCC_NOT_FOUND): New macro.
(lto_symtab_encoder_deref, lsei_start, lsei_next_in_partition,
lsei_start_in_partition, lsei_next_function_in_partition,
lsei_start_function_in_partition, lsei_next_variable_in_partition,
lsei_start_variable_in_partition): New inline functions.
* lto-partition.c (set_referenced_from_other_partition_p,
set_reachable_from_other_partition_p, set_referenced_from_this_partition_p):
New functions.
(lto_promote_cross_file_statics): Use them.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@190336 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto-streamer.h')
-rw-r--r-- | gcc/lto-streamer.h | 176 |
1 files changed, 162 insertions, 14 deletions
diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index b874b0aa016..bed408aef0a 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -433,17 +433,21 @@ struct lto_symtab_encoder_d struct pointer_set_t *body; /* Map of nodes where we want to output initializer. */ struct pointer_set_t *initializer; + /* Map of nodes in this partition. */ + struct pointer_set_t *in_partition; }; typedef struct lto_symtab_encoder_d *lto_symtab_encoder_t; -/* Return number of encoded nodes in ENCODER. */ - -static inline int -lto_symtab_encoder_size (lto_symtab_encoder_t encoder) +/* Iterator structure for cgraph node sets. */ +typedef struct { - return VEC_length (symtab_node, encoder->nodes); -} + lto_symtab_encoder_t encoder; + unsigned index; +} lto_symtab_encoder_iterator; + + + /* Mapping from indices to trees. */ struct GTY(()) lto_tree_ref_table @@ -808,28 +812,29 @@ void lto_output_location (struct output_block *, location_t); /* In lto-cgraph.c */ -symtab_node lto_symtab_encoder_deref (lto_symtab_encoder_t, int); int lto_symtab_encoder_lookup (lto_symtab_encoder_t, symtab_node); lto_symtab_encoder_t lto_symtab_encoder_new (void); int lto_symtab_encoder_encode (lto_symtab_encoder_t, symtab_node); void lto_symtab_encoder_delete (lto_symtab_encoder_t); bool lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t, struct cgraph_node *); +bool lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t, + symtab_node); +void lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t, + symtab_node); bool lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t, struct varpool_node *); -void output_symtab (cgraph_node_set, varpool_node_set); +void output_symtab (void); void input_symtab (void); bool referenced_from_other_partition_p (struct ipa_ref_list *, - cgraph_node_set, - varpool_node_set vset); + lto_symtab_encoder_t); bool reachable_from_other_partition_p (struct cgraph_node *, - cgraph_node_set); + lto_symtab_encoder_t); bool referenced_from_this_partition_p (struct ipa_ref_list *, - cgraph_node_set, - varpool_node_set vset); + lto_symtab_encoder_t); bool reachable_from_this_partition_p (struct cgraph_node *, - cgraph_node_set); + lto_symtab_encoder_t); void compute_ltrans_boundary (struct lto_out_decl_state *state, cgraph_node_set, varpool_node_set); @@ -985,6 +990,149 @@ emit_label_in_global_context_p (tree label) return DECL_NONLOCAL (label) || FORCED_LABEL (label); } +/* Return number of encoded nodes in ENCODER. */ +static inline int +lto_symtab_encoder_size (lto_symtab_encoder_t encoder) +{ + return VEC_length (symtab_node, encoder->nodes); +} + +/* Return true if iterator LSE points to nothing. */ +static inline bool +lsei_end_p (lto_symtab_encoder_iterator lsei) +{ + return lsei.index >= (unsigned)lto_symtab_encoder_size (lsei.encoder); +} + +/* Advance iterator LSE. */ +static inline void +lsei_next (lto_symtab_encoder_iterator *lsei) +{ + lsei->index++; +} + +/* Return the node pointed to by LSI. */ +static inline symtab_node +lsei_node (lto_symtab_encoder_iterator lsei) +{ + return VEC_index (symtab_node, lsei.encoder->nodes, lsei.index); +} + +/* Return the node pointed to by LSI. */ +static inline struct cgraph_node * +lsei_cgraph_node (lto_symtab_encoder_iterator lsei) +{ + return cgraph (VEC_index (symtab_node, lsei.encoder->nodes, lsei.index)); +} + +/* Return the node pointed to by LSI. */ +static inline struct varpool_node * +lsei_varpool_node (lto_symtab_encoder_iterator lsei) +{ + return varpool (VEC_index (symtab_node, lsei.encoder->nodes, lsei.index)); +} + +/* Value used to represent failure of lto_symtab_encoder_lookup. */ +#define LCC_NOT_FOUND (-1) + +/* Return the cgraph node corresponding to REF using ENCODER. */ + +static inline symtab_node +lto_symtab_encoder_deref (lto_symtab_encoder_t encoder, int ref) +{ + if (ref == LCC_NOT_FOUND) + return NULL; + + return VEC_index (symtab_node, encoder->nodes, ref); +} + +/* Return an iterator to the first node in LSI. */ +static inline lto_symtab_encoder_iterator +lsei_start (lto_symtab_encoder_t encoder) +{ + lto_symtab_encoder_iterator lsei; + + lsei.encoder = encoder; + lsei.index = 0; + return lsei; +} + +/* Advance iterator LSE. */ +static inline void +lsei_next_in_partition (lto_symtab_encoder_iterator *lsei) +{ + lsei_next (lsei); + while (!lsei_end_p (*lsei) + && !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))) + lsei_next (lsei); +} + +/* Return an iterator to the first node in LSI. */ +static inline lto_symtab_encoder_iterator +lsei_start_in_partition (lto_symtab_encoder_t encoder) +{ + lto_symtab_encoder_iterator lsei = lsei_start (encoder); + + if (lsei_end_p (lsei)) + return lsei; + if (!lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei))) + lsei_next_in_partition (&lsei); + + return lsei; +} + +/* Advance iterator LSE. */ +static inline void +lsei_next_function_in_partition (lto_symtab_encoder_iterator *lsei) +{ + lsei_next (lsei); + while (!lsei_end_p (*lsei) + && (!symtab_function_p (lsei_node (*lsei)) + || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei)))) + lsei_next (lsei); +} + +/* Return an iterator to the first node in LSI. */ +static inline lto_symtab_encoder_iterator +lsei_start_function_in_partition (lto_symtab_encoder_t encoder) +{ + lto_symtab_encoder_iterator lsei = lsei_start (encoder); + + if (lsei_end_p (lsei)) + return lsei; + if (!symtab_function_p (lsei_node (lsei)) + || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei))) + lsei_next_function_in_partition (&lsei); + + return lsei; +} + +/* Advance iterator LSE. */ +static inline void +lsei_next_variable_in_partition (lto_symtab_encoder_iterator *lsei) +{ + lsei_next (lsei); + while (!lsei_end_p (*lsei) + && (!symtab_variable_p (lsei_node (*lsei)) + || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei)))) + lsei_next (lsei); +} + +/* Return an iterator to the first node in LSI. */ +static inline lto_symtab_encoder_iterator +lsei_start_variable_in_partition (lto_symtab_encoder_t encoder) +{ + lto_symtab_encoder_iterator lsei = lsei_start (encoder); + + if (lsei_end_p (lsei)) + return lsei; + if (!symtab_variable_p (lsei_node (lsei)) + || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei))) + lsei_next_variable_in_partition (&lsei); + + return lsei; +} + DEFINE_DECL_STREAM_FUNCS (TYPE, type) DEFINE_DECL_STREAM_FUNCS (FIELD_DECL, field_decl) DEFINE_DECL_STREAM_FUNCS (FN_DECL, fn_decl) |