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
This commit is contained in:
parent
ca752f3929
commit
6c907cff66
|
@ -1,3 +1,24 @@
|
|||
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...
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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); }
|
||||
|
|
Loading…
Reference in New Issue