diff options
author | Trevor Saunders <tsaunders@mozilla.com> | 2014-06-24 13:21:53 +0000 |
---|---|---|
committer | Trevor Saunders <tbsaunde@gcc.gnu.org> | 2014-06-24 13:21:53 +0000 |
commit | 84baa4b968f2dbf4e85e49dba9215ad0f0f3ddc8 (patch) | |
tree | 8527b8e2f9f9bb9c3a525567a8e393965e2ad66c /gcc/tree-hasher.h | |
parent | c203e8a73b2f12a1da52a16a0c4a50e62b42445b (diff) | |
download | gcc-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.h | 23 |
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; |