aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-06-25 17:15:54 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-06-25 17:15:54 +0000
commit910ee068dfe96a049298066301b2f48e00299789 (patch)
treec0a0e6676bc3c8d75377a2d4e197dead803b8531 /gcc
parentd6a818c59e002f76f237ad305bf4b73a415dcb3c (diff)
downloadgcc-910ee068dfe96a049298066301b2f48e00299789.zip
gcc-910ee068dfe96a049298066301b2f48e00299789.tar.gz
gcc-910ee068dfe96a049298066301b2f48e00299789.tar.bz2
tree-hash-traits.h (tree_decl_hash): New class.
gcc/ * tree-hash-traits.h (tree_decl_hash): New class. * tree-ssa-strlen.c: Include tree-hash-traits.h. (stridxlist_hash_traits): Use tree_decl_hash. From-SVN: r224968
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-hash-traits.h14
-rw-r--r--gcc/tree-ssa-strlen.c16
3 files changed, 22 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9087350..30b7cdc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
+ * tree-hash-traits.h (tree_decl_hash): New class.
+ * tree-ssa-strlen.c: Include tree-hash-traits.h.
+ (stridxlist_hash_traits): Use tree_decl_hash.
+
+2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
+
* tree-hash-traits.h: New file.
(tree_operand_hash): New class.
* sanopt.c: Include tree-hash-traits.h.
diff --git a/gcc/tree-hash-traits.h b/gcc/tree-hash-traits.h
index eab8c30..9a2fda7 100644
--- a/gcc/tree-hash-traits.h
+++ b/gcc/tree-hash-traits.h
@@ -39,4 +39,18 @@ tree_operand_hash::equal_keys (const_tree t1, const_tree t2)
return operand_equal_p (t1, t2, 0);
}
+/* Hasher for tree decls. Pointer equality is enough here, but the DECL_UID
+ is a better hash than the pointer value and gives a predictable traversal
+ order. */
+struct tree_decl_hash : ggc_ptr_hash <tree_node>
+{
+ static inline hashval_t hash (tree);
+};
+
+inline hashval_t
+tree_decl_hash::hash (tree t)
+{
+ return DECL_UID (t);
+}
+
#endif
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c
index fc848ea..97e8963 100644
--- a/gcc/tree-ssa-strlen.c
+++ b/gcc/tree-ssa-strlen.c
@@ -71,6 +71,7 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-ref.h"
#include "cgraph.h"
#include "ipa-chkp.h"
+#include "tree-hash-traits.h"
/* A vector indexed by SSA_NAME_VERSION. 0 means unknown, positive value
is an index into strinfo vector, negative value stands for
@@ -153,20 +154,7 @@ struct decl_stridxlist_map
struct stridxlist list;
};
-/* stridxlist hashtable helpers. */
-
-struct stridxlist_hash_traits : default_hashmap_traits
-{
- static inline hashval_t hash (tree);
-};
-
-/* Hash a from tree in a decl_stridxlist_map. */
-
-inline hashval_t
-stridxlist_hash_traits::hash (tree item)
-{
- return DECL_UID (item);
-}
+typedef simple_hashmap_traits <tree_decl_hash> stridxlist_hash_traits;
/* Hash table for mapping decls to a chained list of offset -> idx
mappings. */