diff options
author | Jan Hubicka <jh@suse.cz> | 2020-06-02 17:39:58 +0200 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-06-02 17:39:58 +0200 |
commit | 34e5efa10a7b514238ed9a914b802898d2d8cb36 (patch) | |
tree | 845b7d76584efb727c753eeb9ee2f1ce301caf30 | |
parent | d3b6767dce45a7100e4cc32d2986a55f09a2cce2 (diff) | |
download | gcc-34e5efa10a7b514238ed9a914b802898d2d8cb36.zip gcc-34e5efa10a7b514238ed9a914b802898d2d8cb36.tar.gz gcc-34e5efa10a7b514238ed9a914b802898d2d8cb36.tar.bz2 |
Simplify streaming of tree references
* lto-streamer-in.c (stream_read_tree_ref): Simplify streaming of
references.
* lto-streamer-out.c (stream_write_tree_ref): Likewise.
-rw-r--r-- | gcc/lto-streamer-in.c | 24 | ||||
-rw-r--r-- | gcc/lto-streamer-out.c | 10 |
2 files changed, 20 insertions, 14 deletions
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index 5eaba7d..15bfb61 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -1501,20 +1501,22 @@ lto_input_scc (class lto_input_block *ib, class data_in *data_in, tree stream_read_tree_ref (lto_input_block *ib, data_in *data_in) { - unsigned ix = streamer_read_uhwi (ib); - tree ret; + int ix = streamer_read_hwi (ib); if (!ix) return NULL_TREE; - else if (ix < LTO_NUM_TAGS) - ret = lto_input_tree_ref (ib, data_in, cfun, (LTO_tags)ix); + if (ix > 0) + return streamer_tree_cache_get_tree (data_in->reader_cache, ix - 1); + + ix = -ix - 1; + int id = ix & 1; + ix /= 2; + + tree ret; + if (!id) + ret = (*data_in->file_data->current_decl_state + ->streams[LTO_DECL_STREAM])[ix]; else - ret = streamer_tree_cache_get_tree (data_in->reader_cache, - ix - LTO_NUM_TAGS); - if (ret && streamer_debugging) - { - enum tree_code c = (enum tree_code)streamer_read_uhwi (ib); - gcc_assert (c == TREE_CODE (ret)); - } + ret = (*SSANAMES (cfun))[ix]; return ret; } diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index dfc4603..f71d3f8 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -400,15 +400,19 @@ stream_write_tree_ref (struct output_block *ob, tree t) unsigned int ix; bool existed_p = streamer_tree_cache_lookup (ob->writer_cache, t, &ix); if (existed_p) - streamer_write_uhwi (ob, ix + LTO_NUM_TAGS); + streamer_write_hwi (ob, ix + 1); else { enum LTO_tags tag; unsigned ix; + int id = 0; lto_indexable_tree_ref (ob, t, &tag, &ix); - streamer_write_uhwi (ob, tag); - streamer_write_uhwi (ob, ix); + if (tag == LTO_ssa_name_ref) + id = 1; + else + gcc_checking_assert (tag == LTO_global_stream_ref); + streamer_write_hwi (ob, -(int)(ix * 2 + id + 1)); } if (streamer_debugging) streamer_write_uhwi (ob, TREE_CODE (t)); |