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-ssa-dom.c | |
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-ssa-dom.c')
-rw-r--r-- | gcc/tree-ssa-dom.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 6c581ba..61e75b6 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -158,21 +158,22 @@ static void free_expr_hash_elt (void *); struct expr_elt_hasher { - typedef expr_hash_elt value_type; - typedef expr_hash_elt compare_type; - static inline hashval_t hash (const value_type *); - static inline bool equal (const value_type *, const compare_type *); - static inline void remove (value_type *); + typedef expr_hash_elt *value_type; + typedef expr_hash_elt *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 inline void remove (value_type &); }; inline hashval_t -expr_elt_hasher::hash (const value_type *p) +expr_elt_hasher::hash (const value_type &p) { return p->hash; } inline bool -expr_elt_hasher::equal (const value_type *p1, const compare_type *p2) +expr_elt_hasher::equal (const value_type &p1, const compare_type &p2) { gimple stmt1 = p1->stmt; const struct hashable_expr *expr1 = &p1->expr; @@ -211,7 +212,7 @@ expr_elt_hasher::equal (const value_type *p1, const compare_type *p2) /* Delete an expr_hash_elt and reclaim its storage. */ inline void -expr_elt_hasher::remove (value_type *element) +expr_elt_hasher::remove (value_type &element) { free_expr_hash_elt (element); } |