aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-streamer.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-streamer.c')
-rw-r--r--gcc/tree-streamer.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/tree-streamer.c b/gcc/tree-streamer.c
index fcdf432..86bad29 100644
--- a/gcc/tree-streamer.c
+++ b/gcc/tree-streamer.c
@@ -197,7 +197,10 @@ streamer_tree_cache_replace_tree (struct streamer_tree_cache_d *cache,
hashval_t hash = 0;
if (cache->hashes.exists ())
hash = streamer_tree_cache_get_hash (cache, ix);
- streamer_tree_cache_insert_1 (cache, t, hash, &ix, false);
+ if (!cache->node_map)
+ streamer_tree_cache_add_to_node_array (cache, ix, t, hash);
+ else
+ streamer_tree_cache_insert_1 (cache, t, hash, &ix, false);
}
@@ -208,7 +211,10 @@ streamer_tree_cache_append (struct streamer_tree_cache_d *cache,
tree t, hashval_t hash)
{
unsigned ix = cache->nodes.length ();
- streamer_tree_cache_insert_1 (cache, t, hash, &ix, false);
+ if (!cache->node_map)
+ streamer_tree_cache_add_to_node_array (cache, ix, t, hash);
+ else
+ streamer_tree_cache_insert_1 (cache, t, hash, &ix, false);
}
/* Return true if tree node T exists in CACHE, otherwise false. If IX_P is
@@ -319,13 +325,14 @@ preload_common_nodes (struct streamer_tree_cache_d *cache)
/* Create a cache of pickled nodes. */
struct streamer_tree_cache_d *
-streamer_tree_cache_create (bool with_hashes)
+streamer_tree_cache_create (bool with_hashes, bool with_map)
{
struct streamer_tree_cache_d *cache;
cache = XCNEW (struct streamer_tree_cache_d);
- cache->node_map = pointer_map_create ();
+ if (with_map)
+ cache->node_map = pointer_map_create ();
cache->nodes.create (165);
if (with_hashes)
cache->hashes.create (165);
@@ -347,7 +354,8 @@ streamer_tree_cache_delete (struct streamer_tree_cache_d *c)
if (c == NULL)
return;
- pointer_map_destroy (c->node_map);
+ if (c->node_map)
+ pointer_map_destroy (c->node_map);
c->nodes.release ();
c->hashes.release ();
free (c);