diff options
author | Richard Biener <rguenther@suse.de> | 2013-06-17 15:08:24 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-06-17 15:08:24 +0000 |
commit | ee03e71d472a3f73cbc1a132a284309f36565972 (patch) | |
tree | 37057cc11efb7f662edca2c35160d9fcf3e20d36 /gcc/tree-streamer.h | |
parent | a0e33cbcd8966627b6a9d88b14e4ad9efccc97b4 (diff) | |
download | gcc-ee03e71d472a3f73cbc1a132a284309f36565972.zip gcc-ee03e71d472a3f73cbc1a132a284309f36565972.tar.gz gcc-ee03e71d472a3f73cbc1a132a284309f36565972.tar.bz2 |
lto-streamer.h (enum LTO_tags): Add LTO_tree_scc.
2013-06-17 Richard Biener <rguenther@suse.de>
* lto-streamer.h (enum LTO_tags): Add LTO_tree_scc.
(lto_input_scc): Declare.
(lto_input_tree_1): Likewise.
(struct lto_stats_d): Add num_tree_bodies_output and
num_pickle_refs_output.
* lto-streamer-in.c (lto_read_body): Use streamer_tree_cache_get_tree.
(lto_read_tree_1): Split out from ...
(lto_read_tree): ... this.
(lto_input_scc): New function.
(lto_input_tree_1): Split out from ...
(lto_input_tree): ... this. Handle LTO_tree_scc.
(lto_data_in_create): Create the streamer cache without hashes.
* lto-streamer-out.c (create_output_block): Create the streamer
cache with hashes when not doing WPA.
(lto_write_tree_1): Split out from ...
(lto_write_tree): ... this.
(get_symbol_initial_value): New function.
(lto_output_tree_1): Split out from ...
(lto_output_tree): ... this. Write trees as series of SCCs
using a DFS walk via DFS_write_tree.
(struct sccs, struct scc_entry): New types.
(next_dfs_num, sccstack, sccstate, sccstate_obstack): New globals.
(DFS_write_tree_body): New function.
(DFS_write_tree): Likewise.
(hash_tree): Likewise.
(scc_entry_compare): Likewise.
(hash_scc): Likewise.
(tree_is_indexable): DEBUG_EXPR_DECLs are local entities.
* tree-streamer-in.c (lto_input_ts_list_tree_pointers): Stream
TREE_CHAIN as regular reference.
(streamer_read_integer_cst): Remove.
(streamer_get_pickled_tree): Adjust.
* tree-streamer-out.c (streamer_write_chain): Disable streaming
of DECL_EXTERNALs in BLOCK_VARS for now.
(write_ts_list_tree_pointers): Stream TREE_CHAIN as regular
reference.
* tree-streamer.c (streamer_tree_cache_add_to_node_array):
Add hash value argument and record that if hashes are recorded
in the cache.
(streamer_tree_cache_insert_1): Adjust.
(streamer_tree_cache_insert): Likewise.
(streamer_tree_cache_insert_at): Rename to ...
(streamer_tree_cache_replace_tree): ... this and adjust.
(streamer_tree_cache_append): Adjust.
(record_common_node): Likewise.
(streamer_tree_cache_create): Add argument whether to
record hash values together with trees.
(streamer_tree_cache_delete): Adjust.
* tree-streamer.h (struct streamer_tree_cache_d): Add
vector of hashes.
(streamer_read_integer_cst): Remove.
(streamer_tree_cache_insert): Adjust.
(streamer_tree_cache_append): Likewise.
(streamer_tree_cache_insert_at): Rename to ...
(streamer_tree_cache_replace_tree): ... this and adjust.
(streamer_tree_cache_create): Add argument whether to record hashes.
(streamer_tree_cache_get): Rename to ...
(streamer_tree_cache_get_tree): ... this.
(streamer_tree_cache_get_hash): New function.
* tree.c (cache_integer_cst): New function.
* tree.h (cache_integer_cst): Declare.
(ANON_AGGRNAME_FORMAT, ANON_AGGRNAME_P): Move here from cp/cp-tree.h.
* lto-symtab.c (lto_varpool_replace_node): Only release
DECL_INITIAL of non-prevailing decls.
* varpool.c (varpool_remove_initializer): Do not release
DECL_INITIAL when we are still in CGRAPH_LTO_STREAMING.
cp/
* cp-tree.h (ANON_AGGRNAME_FORMAT, ANON_AGGRNAME_P): Move to tree.h.
lto/
* Make-lang.in (lto.o): Add $(DATA_STREAMER_H) dependency.
* lto.c: Include data-streamer.h.
(lto_read_in_decl_state): Use streamer_tree_cache_get_tree.
(gimple_type_leader_entry_s, gimple_type_leader,
gimple_lookup_type_leader): Remove.
(gtc_visit): Simplify.
(gimple_types_compatible_p): Likewise.
(gimple_register_type_1): Likewise. Merge into ...
(gimple_register_type): ... this. Keep it as legacy for
statistics purposes for now.
(fixup_integer_cst): Remove.
(LTO_FIXUP_TREE, lto_fixup_types, lto_ft_*): Simplify and
rename to ...
(MAYBE_REMEMBER_WITH_VARS, maybe_remember_with_vars,
maybe_remember_with_vars_*): ... these.
(uniquify_nodes): Remove.
(lto_fixup_prevailing_type): New function.
(struct tree_scc, struct tree_scc_hasher): New type and hasher.
(tree_scc_hash, tree_scc_hash_obstack): New globals.
(num_merged_types, num_prevailing_types, num_not_merged_types,
num_not_merged_types_in_same_scc, total_scc_size, num_sccs_read,
total_scc_size_merged, num_sccs_merged, num_scc_compares,
num_scc_compare_collisions): New global counters.
(compare_tree_sccs_1): New function.
(compare_tree_sccs): Likewise.
(unify_scc): Likewise.
(lto_read_decls): Stream in tree SCCs and unify them on the
way in. Finalize prevailing SCC tree members.
(read_cgraph_and_symbols): Do not initialize or free gimple_type_leader.
Allocate and free tree_scc_hash_obstack and tree_scc_hash, do not bother
to ggc-collect during merging.
(print_lto_report_1): Adjust for new merging code.
From-SVN: r200151
Diffstat (limited to 'gcc/tree-streamer.h')
-rw-r--r-- | gcc/tree-streamer.h | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/gcc/tree-streamer.h b/gcc/tree-streamer.h index da7ab9f..d285528 100644 --- a/gcc/tree-streamer.h +++ b/gcc/tree-streamer.h @@ -43,6 +43,7 @@ along with GCC; see the file COPYING3. If not see T. The reconstructed T is inserted in some array so that when the reference index for T is found in the input stream, it can be used to look up into the array to get the reconstructed T. */ + struct streamer_tree_cache_d { /* The mapping between tree nodes and slots into the nodes array. */ @@ -50,6 +51,8 @@ struct streamer_tree_cache_d /* The nodes pickled so far. */ vec<tree> nodes; + /* The node hashes (if available). */ + vec<hashval_t> hashes; }; /* Return true if tree node EXPR should be streamed as a builtin. For @@ -71,7 +74,6 @@ tree streamer_alloc_tree (struct lto_input_block *, struct data_in *, void streamer_read_tree_body (struct lto_input_block *, struct data_in *, tree); tree streamer_get_pickled_tree (struct lto_input_block *, struct data_in *); tree streamer_get_builtin_tree (struct lto_input_block *, struct data_in *); -tree streamer_read_integer_cst (struct lto_input_block *, struct data_in *); struct bitpack_d streamer_read_tree_bitfields (struct lto_input_block *, struct data_in *, tree); @@ -89,22 +91,31 @@ void streamer_write_builtin (struct output_block *, tree); /* In tree-streamer.c. */ void streamer_check_handled_ts_structures (void); bool streamer_tree_cache_insert (struct streamer_tree_cache_d *, tree, - unsigned *); -bool streamer_tree_cache_insert_at (struct streamer_tree_cache_d *, tree, - unsigned); -void streamer_tree_cache_append (struct streamer_tree_cache_d *, tree); + hashval_t, unsigned *); +void streamer_tree_cache_replace_tree (struct streamer_tree_cache_d *, tree, + unsigned); +void streamer_tree_cache_append (struct streamer_tree_cache_d *, tree, + hashval_t); bool streamer_tree_cache_lookup (struct streamer_tree_cache_d *, tree, unsigned *); -struct streamer_tree_cache_d *streamer_tree_cache_create (void); +struct streamer_tree_cache_d *streamer_tree_cache_create (bool); void streamer_tree_cache_delete (struct streamer_tree_cache_d *); /* Return the tree node at slot IX in CACHE. */ static inline tree -streamer_tree_cache_get (struct streamer_tree_cache_d *cache, unsigned ix) +streamer_tree_cache_get_tree (struct streamer_tree_cache_d *cache, unsigned ix) { return cache->nodes[ix]; } +/* Return the tree hash value at slot IX in CACHE. */ + +static inline hashval_t +streamer_tree_cache_get_hash (struct streamer_tree_cache_d *cache, unsigned ix) +{ + return cache->hashes[ix]; +} + #endif /* GCC_TREE_STREAMER_H */ |