diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-06-25 17:06:44 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-06-25 17:06:44 +0000 |
commit | 6c907cff668b1c4bf305b1988d99acbf841f6f52 (patch) | |
tree | 2e989ada68962878a3c51638dc18cf3f243933ca /gcc | |
parent | ca752f3929677221a5806daf4940367308fc16d7 (diff) | |
download | gcc-6c907cff668b1c4bf305b1988d99acbf841f6f52.zip gcc-6c907cff668b1c4bf305b1988d99acbf841f6f52.tar.gz gcc-6c907cff668b1c4bf305b1988d99acbf841f6f52.tar.bz2 |
hash-traits.h (ggc_cache_hasher): Rename to...
gcc/
* hash-traits.h (ggc_cache_hasher): Rename to...
(ggc_cache_remove): ...this and remove typedefs.
(ggc_cache_ptr_hash): New class.
* hash-table.h: Update commentary.
* emit-rtl.c (const_int_hasher): Inherit from ggc_cache_ptr_hash
rather than ggc_cache_hasher.
(const_wide_int_hasher, reg_attr_hasher): Likewise.
(const_double_hasher, const_fixed_hasher): Likewise.
* function.c (insn_cache_hasher): Likewise.
* trans-mem.c (tm_wrapper_hasher): Likewise.
* tree.h (tree_decl_map_cache_hasher): Likewise.
* tree.c (type_cache_hasher, int_cst_hasher): Likewise.
(cl_option_hasher, tree_vec_map_cache_hasher): Likewise.
* ubsan.c (tree_type_map_cache_hasher): Likewise.
* varasm.c (tm_clone_hasher): Likewise.
* config/i386/i386.c (dllimport_hasher): Likewise.
* config/nvptx/nvptx.c (declared_libfunc_hasher): Likewise.
(tree_hasher): Likewise.
gcc/ada/
* gcc-interface/decl.c (value_annotation_hasher): Inherit from
ggc_cache_ptr_hash rather than ggc_cache_hasher.
* gcc-interface/utils.c (pad_type_hasher): Likewise.
From-SVN: r224960
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 21 | ||||
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/decl.c | 2 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 2 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.c | 4 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 10 | ||||
-rw-r--r-- | gcc/function.c | 2 | ||||
-rw-r--r-- | gcc/hash-table.h | 9 | ||||
-rw-r--r-- | gcc/hash-traits.h | 15 | ||||
-rw-r--r-- | gcc/trans-mem.c | 2 | ||||
-rw-r--r-- | gcc/tree.c | 8 | ||||
-rw-r--r-- | gcc/tree.h | 2 | ||||
-rw-r--r-- | gcc/ubsan.c | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 2 |
15 files changed, 64 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9737e4a..3f906d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,26 @@ 2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * hash-traits.h (ggc_cache_hasher): Rename to... + (ggc_cache_remove): ...this and remove typedefs. + (ggc_cache_ptr_hash): New class. + * hash-table.h: Update commentary. + * emit-rtl.c (const_int_hasher): Inherit from ggc_cache_ptr_hash + rather than ggc_cache_hasher. + (const_wide_int_hasher, reg_attr_hasher): Likewise. + (const_double_hasher, const_fixed_hasher): Likewise. + * function.c (insn_cache_hasher): Likewise. + * trans-mem.c (tm_wrapper_hasher): Likewise. + * tree.h (tree_decl_map_cache_hasher): Likewise. + * tree.c (type_cache_hasher, int_cst_hasher): Likewise. + (cl_option_hasher, tree_vec_map_cache_hasher): Likewise. + * ubsan.c (tree_type_map_cache_hasher): Likewise. + * varasm.c (tm_clone_hasher): Likewise. + * config/i386/i386.c (dllimport_hasher): Likewise. + * config/nvptx/nvptx.c (declared_libfunc_hasher): Likewise. + (tree_hasher): Likewise. + +2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * hash-traits.h (ggc_hasher): Rename to... (ggc_remover): ...this and remove typedefs. (ggc_cache_hasher): Update accordingly. Add typedefs. diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e4fc125..d07340a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,11 @@ 2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * gcc-interface/decl.c (value_annotation_hasher): Inherit from + ggc_cache_ptr_hash rather than ggc_cache_hasher. + * gcc-interface/utils.c (pad_type_hasher): Likewise. + +2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * gcc-interface/decl.c (value_annotation_hasher::handle_cache_entry): Delete. (value_annotation_hasher::keep_cache_entry): New function. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 7511c56..1c82b6e 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -134,7 +134,7 @@ typedef struct variant_desc_d { /* A hash table used to cache the result of annotate_value. */ -struct value_annotation_hasher : ggc_cache_hasher<tree_int_map *> +struct value_annotation_hasher : ggc_cache_ptr_hash<tree_int_map> { static inline hashval_t hash (tree_int_map *m) diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 6044600..f09db59 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -237,7 +237,7 @@ struct GTY((for_user)) pad_type_hash { tree type; }; -struct pad_type_hasher : ggc_cache_hasher<pad_type_hash *> +struct pad_type_hasher : ggc_cache_ptr_hash<pad_type_hash> { static inline hashval_t hash (pad_type_hash *t) { return t->hash; } static bool equal (pad_type_hash *a, pad_type_hash *b); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index a05f226..5c90440 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -14212,7 +14212,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) to symbol DECL if BEIMPORT is true. Otherwise create or return the unique refptr-DECL symbol corresponding to symbol DECL. */ -struct dllimport_hasher : ggc_cache_hasher<tree_map *> +struct dllimport_hasher : ggc_cache_ptr_hash<tree_map> { static inline hashval_t hash (tree_map *m) { return m->hash; } static inline bool diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 98e7422..af08abe 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -66,7 +66,7 @@ decls corresponding to them. */ static std::stringstream func_decls; -struct declared_libfunc_hasher : ggc_cache_hasher<rtx> +struct declared_libfunc_hasher : ggc_cache_ptr_hash<rtx_def> { static hashval_t hash (rtx x) { return htab_hash_pointer (x); } static bool equal (rtx a, rtx b) { return a == b; } @@ -75,7 +75,7 @@ struct declared_libfunc_hasher : ggc_cache_hasher<rtx> static GTY((cache)) hash_table<declared_libfunc_hasher> *declared_libfuncs_htab; - struct tree_hasher : ggc_cache_hasher<tree> +struct tree_hasher : ggc_cache_ptr_hash<tree_node> { static hashval_t hash (tree t) { return htab_hash_pointer (t); } static bool equal (tree a, tree b) { return a == b; } diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index bab02fe..e7f7eab 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -140,7 +140,7 @@ rtx_insn *invalid_insn_rtx; /* A hash table storing CONST_INTs whose absolute value is greater than MAX_SAVED_CONST_INT. */ -struct const_int_hasher : ggc_cache_hasher<rtx> +struct const_int_hasher : ggc_cache_ptr_hash<rtx_def> { typedef HOST_WIDE_INT compare_type; @@ -150,7 +150,7 @@ struct const_int_hasher : ggc_cache_hasher<rtx> static GTY ((cache)) hash_table<const_int_hasher> *const_int_htab; -struct const_wide_int_hasher : ggc_cache_hasher<rtx> +struct const_wide_int_hasher : ggc_cache_ptr_hash<rtx_def> { static hashval_t hash (rtx x); static bool equal (rtx x, rtx y); @@ -159,7 +159,7 @@ struct const_wide_int_hasher : ggc_cache_hasher<rtx> static GTY ((cache)) hash_table<const_wide_int_hasher> *const_wide_int_htab; /* A hash table storing register attribute structures. */ -struct reg_attr_hasher : ggc_cache_hasher<reg_attrs *> +struct reg_attr_hasher : ggc_cache_ptr_hash<reg_attrs> { static hashval_t hash (reg_attrs *x); static bool equal (reg_attrs *a, reg_attrs *b); @@ -168,7 +168,7 @@ struct reg_attr_hasher : ggc_cache_hasher<reg_attrs *> static GTY ((cache)) hash_table<reg_attr_hasher> *reg_attrs_htab; /* A hash table storing all CONST_DOUBLEs. */ -struct const_double_hasher : ggc_cache_hasher<rtx> +struct const_double_hasher : ggc_cache_ptr_hash<rtx_def> { static hashval_t hash (rtx x); static bool equal (rtx x, rtx y); @@ -177,7 +177,7 @@ struct const_double_hasher : ggc_cache_hasher<rtx> static GTY ((cache)) hash_table<const_double_hasher> *const_double_htab; /* A hash table storing all CONST_FIXEDs. */ -struct const_fixed_hasher : ggc_cache_hasher<rtx> +struct const_fixed_hasher : ggc_cache_ptr_hash<rtx_def> { static hashval_t hash (rtx x); static bool equal (rtx x, rtx y); diff --git a/gcc/function.c b/gcc/function.c index f6b7d30..cb3e9bb 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -122,7 +122,7 @@ struct function *cfun = 0; /* These hashes record the prologue and epilogue insns. */ -struct insn_cache_hasher : ggc_cache_hasher<rtx> +struct insn_cache_hasher : ggc_cache_ptr_hash<rtx_def> { static hashval_t hash (rtx x) { return htab_hash_pointer (x); } static bool equal (rtx a, rtx b) { return a == b; } diff --git a/gcc/hash-table.h b/gcc/hash-table.h index 3f49345..5f3dbed 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -91,7 +91,7 @@ along with GCC; see the file COPYING3. If not see We compose this into a few steps. 1. Decide on a removal policy for values stored in the table. - hash-traits.h provides class templates for the three most common + hash-traits.h provides class templates for the four most common policies: * typed_free_remove implements the static 'remove' member function @@ -105,6 +105,13 @@ along with GCC; see the file COPYING3. If not see Use this for garbage-collected data that needs to be preserved across collections. + * ggc_cache_remove is like ggc_remove, except that it does not + mark the entries during the normal gc mark phase. Instead it + uses 'keep_cache_entry' (described above) to keep elements that + were not collected and delete those that were. Use this for + garbage-collected caches that should not in themselves stop + the data from being collected. + You can use these policies by simply deriving the descriptor type from one of those class template, with the appropriate argument. diff --git a/gcc/hash-traits.h b/gcc/hash-traits.h index 77f88f3..5fd43f1 100644 --- a/gcc/hash-traits.h +++ b/gcc/hash-traits.h @@ -149,14 +149,12 @@ struct ggc_remove } }; -/* Hasher for cache entry in gc memory. */ +/* Remover and marker for "cache" entries in gc memory. These entries can + be deleted if there are no non-cache references to the data. */ template<typename T> -struct ggc_cache_hasher : ggc_remove<T> +struct ggc_cache_remove : ggc_remove<T> { - typedef T value_type; - typedef T compare_type; - /* Entries are weakly held because this is for caches. */ static void ggc_mx (T &) {} @@ -185,4 +183,11 @@ struct free_ptr_hash : pointer_hash <T>, typed_free_remove <T> {}; template <typename T> struct ggc_ptr_hash : pointer_hash <T>, ggc_remove <T *> {}; +/* Traits for elements that point to gc memory. The elements don't + in themselves keep the pointed-to data alive and they can be deleted + if the pointed-to data is going to be collected. */ + +template <typename T> +struct ggc_cache_ptr_hash : pointer_hash <T>, ggc_cache_remove <T *> {}; + #endif diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index b3dbcbd..9e860ce 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -471,7 +471,7 @@ build_tm_abort_call (location_t loc, bool is_outer) /* Map for aribtrary function replacement under TM, as created by the tm_wrap attribute. */ -struct tm_wrapper_hasher : ggc_cache_hasher<tree_map *> +struct tm_wrapper_hasher : ggc_cache_ptr_hash<tree_map> { static inline hashval_t hash (tree_map *m) { return m->hash; } static inline bool @@ -196,7 +196,7 @@ struct GTY((for_user)) type_hash { /* Initial size of the hash table (rounded to next prime). */ #define TYPE_HASH_INITIAL_SIZE 1000 -struct type_cache_hasher : ggc_cache_hasher<type_hash *> +struct type_cache_hasher : ggc_cache_ptr_hash<type_hash> { static hashval_t hash (type_hash *t) { return t->hash; } static bool equal (type_hash *a, type_hash *b); @@ -220,7 +220,7 @@ static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table; /* Hash table and temporary node for larger integer const values. */ static GTY (()) tree int_cst_node; -struct int_cst_hasher : ggc_cache_hasher<tree> +struct int_cst_hasher : ggc_cache_ptr_hash<tree_node> { static hashval_t hash (tree t); static bool equal (tree x, tree y); @@ -236,7 +236,7 @@ static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table; static GTY (()) tree cl_optimization_node; static GTY (()) tree cl_target_option_node; -struct cl_option_hasher : ggc_cache_hasher<tree> +struct cl_option_hasher : ggc_cache_ptr_hash<tree_node> { static hashval_t hash (tree t); static bool equal (tree x, tree y); @@ -253,7 +253,7 @@ static GTY ((cache)) static GTY ((cache)) hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl; -struct tree_vec_map_cache_hasher : ggc_cache_hasher<tree_vec_map *> +struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map> { static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); } @@ -4626,7 +4626,7 @@ extern unsigned int tree_map_hash (const void *); extern unsigned int tree_decl_map_hash (const void *); #define tree_decl_map_marked_p tree_map_base_marked_p -struct tree_decl_map_cache_hasher : ggc_cache_hasher<tree_decl_map *> +struct tree_decl_map_cache_hasher : ggc_cache_ptr_hash<tree_decl_map> { static hashval_t hash (tree_decl_map *m) { return tree_decl_map_hash (m); } static bool diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 14e54ef..ded725a 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -83,7 +83,7 @@ struct GTY((for_user)) tree_type_map { tree decl; }; -struct tree_type_map_cache_hasher : ggc_cache_hasher<tree_type_map *> +struct tree_type_map_cache_hasher : ggc_cache_ptr_hash<tree_type_map> { static inline hashval_t hash (tree_type_map *t) diff --git a/gcc/varasm.c b/gcc/varasm.c index 0f87228..611b6ca 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -5790,7 +5790,7 @@ assemble_alias (tree decl, tree target) to its transaction aware clone. Note that tm_pure functions are considered to be their own clone. */ -struct tm_clone_hasher : ggc_cache_hasher<tree_map *> +struct tm_clone_hasher : ggc_cache_ptr_hash<tree_map> { static hashval_t hash (tree_map *m) { return tree_map_hash (m); } static bool equal (tree_map *a, tree_map *b) { return tree_map_eq (a, b); } |