Hi.
There's a patch candidate for the issue that moves the hash
to sem_item. Doing that you'll have control over it when
you'll use sem_{item,variable,function} classes.
Is it fine?
Martin
>From 95f2d9d940554ba40d5889df5b2c0e3d3f558388 Mon Sep 17 00:00:00 2001
From: marxin <[email protected]>
Date: Wed, 29 Aug 2018 15:49:33 +0200
Subject: [PATCH] IPA ICF: make type cache a static field sem_item.
gcc/ChangeLog:
2018-08-29 Martin Liska <[email protected]>
* ipa-icf.c (sem_item::add_type): Use
sem_item::m_type_hash_cache.
* ipa-icf.h: Move the cache from sem_item_optimizer
to sem_item.
---
gcc/ipa-icf.c | 6 ++++--
gcc/ipa-icf.h | 6 +++---
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 39b96ba13be..8a6a7a3f32f 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -227,6 +227,8 @@ void sem_item::set_hash (hashval_t hash)
m_hash_set = true;
}
+hash_map<const_tree, hashval_t> sem_item::m_type_hash_cache;
+
/* Semantic function constructor that uses STACK as bitmap memory stack. */
sem_function::sem_function (bitmap_obstack *stack)
@@ -1587,7 +1589,7 @@ sem_item::add_type (const_tree type, inchash::hash &hstate)
return;
}
- hashval_t *val = optimizer->m_type_hash_cache.get (type);
+ hashval_t *val = m_type_hash_cache.get (type);
if (!val)
{
@@ -1607,7 +1609,7 @@ sem_item::add_type (const_tree type, inchash::hash &hstate)
hstate2.add_int (nf);
hash = hstate2.end ();
hstate.add_hwi (hash);
- optimizer->m_type_hash_cache.put (type, hash);
+ m_type_hash_cache.put (type, hash);
}
else
hstate.add_hwi (*val);
diff --git a/gcc/ipa-icf.h b/gcc/ipa-icf.h
index 622aebc00c0..a64b3852efb 100644
--- a/gcc/ipa-icf.h
+++ b/gcc/ipa-icf.h
@@ -281,6 +281,9 @@ private:
/* Initialize internal data structures. Bitmap STACK is used for
bitmap memory allocation process. */
void setup (bitmap_obstack *stack);
+
+ /* Because types can be arbitrarily large, avoid quadratic bottleneck. */
+ static hash_map<const_tree, hashval_t> m_type_hash_cache;
}; // class sem_item
class sem_function: public sem_item
@@ -524,9 +527,6 @@ public:
/* Gets a congruence class group based on given HASH value and TYPE. */
congruence_class_group *get_group_by_hash (hashval_t hash,
sem_item_type type);
-
- /* Because types can be arbitrarily large, avoid quadratic bottleneck. */
- hash_map<const_tree, hashval_t> m_type_hash_cache;
private:
/* For each semantic item, append hash values of references. */
--
2.18.0