aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-hasher.h
diff options
context:
space:
mode:
authorTrevor Saunders <tsaunders@mozilla.com>2014-06-24 13:21:53 +0000
committerTrevor Saunders <tbsaunde@gcc.gnu.org>2014-06-24 13:21:53 +0000
commit84baa4b968f2dbf4e85e49dba9215ad0f0f3ddc8 (patch)
tree8527b8e2f9f9bb9c3a525567a8e393965e2ad66c /gcc/tree-hasher.h
parentc203e8a73b2f12a1da52a16a0c4a50e62b42445b (diff)
downloadgcc-84baa4b968f2dbf4e85e49dba9215ad0f0f3ddc8.zip
gcc-84baa4b968f2dbf4e85e49dba9215ad0f0f3ddc8.tar.gz
gcc-84baa4b968f2dbf4e85e49dba9215ad0f0f3ddc8.tar.bz2
allow storing values directly in hash tables
gcc/ * hash-table.h: Add a template arg to choose between storing values and storing pointers to values, and then provide partial specializations for both. * tree-browser.c (tree_upper_hasher): Provide the type the hash table should store, not the type values should point to. * tree-into-ssa.c (var_info_hasher): Likewise. * tree-ssa-dom.c (expr_elt_hasher): Likewise. * tree-complex.c: Adjust. * tree-hasher.h (int_tree_hasher): store int_tree_map in the hash table instead of int_tree_map *. * tree-parloops.c: Adjust. * tree-ssa-reassoc.c (ocount_hasher): Don't lie to hash_map about what type is being stored. * tree-vectorizer.c: Adjust. From-SVN: r211937
Diffstat (limited to 'gcc/tree-hasher.h')
-rw-r--r--gcc/tree-hasher.h23
1 files changed, 16 insertions, 7 deletions
diff --git a/gcc/tree-hasher.h b/gcc/tree-hasher.h
index 6b28008..ae56a84 100644
--- a/gcc/tree-hasher.h
+++ b/gcc/tree-hasher.h
@@ -30,28 +30,37 @@ struct int_tree_map {
/* Hashtable helpers. */
-struct int_tree_hasher : typed_free_remove <int_tree_map>
+struct int_tree_hasher
{
typedef int_tree_map value_type;
typedef int_tree_map compare_type;
- static inline hashval_t hash (const value_type *);
- static inline bool equal (const value_type *, const compare_type *);
+ typedef int store_values_directly;
+ static inline hashval_t hash (const value_type &);
+ static inline bool equal (const value_type &, const compare_type &);
+ static bool is_deleted (const value_type &v)
+ {
+ return v.to == reinterpret_cast<tree> (1);
+ }
+ static void mark_deleted (value_type &v) { v.to = reinterpret_cast<tree> (0x1); }
+ static bool is_empty (const value_type &v) { return v.to == NULL; }
+ static void mark_empty (value_type &v) { v.to = NULL; }
+ static void remove (value_type &) {}
};
/* Hash a UID in a int_tree_map. */
inline hashval_t
-int_tree_hasher::hash (const value_type *item)
+int_tree_hasher::hash (const value_type &item)
{
- return item->uid;
+ return item.uid;
}
/* Return true if the uid in both int tree maps are equal. */
inline bool
-int_tree_hasher::equal (const value_type *a, const compare_type *b)
+int_tree_hasher::equal (const value_type &a, const compare_type &b)
{
- return (a->uid == b->uid);
+ return (a.uid == b.uid);
}
typedef hash_table <int_tree_hasher> int_tree_htab_type;