From 20d2c372c21b9f92b30428d7b545af320d7d2303 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 25 Jun 2015 17:16:23 +0000 Subject: [PATCH] hash-traits.h (string_hash, [...]): New classes. gcc/ * hash-traits.h (string_hash, nofree_string_hash): New classes. * genmatch.c (capture_id_map_hasher): Use nofree_string_hash. * passes.c (pass_registry_hasher): Likewise. * config/alpha/alpha.c (string_traits): Likewise. * config/i386/winnt.c (i386_find_on_wrapper_list): Likewise. * config/m32c/m32c.c (pragma_traits): Likewise. * config/mep/mep.c (pragma_traits): Likewise. gcc/java/ * jcf-io.c (memoized_class_lookups): Use nofree_string_hash. (find_class): Likewise. From-SVN: r224971 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/alpha/alpha.c | 8 +------- gcc/config/i386/winnt.c | 27 ++------------------------- gcc/config/m32c/m32c.c | 11 +---------- gcc/config/mep/mep.c | 10 +--------- gcc/genmatch.c | 21 +-------------------- gcc/hash-traits.h | 26 ++++++++++++++++++++++++++ gcc/java/ChangeLog | 5 +++++ gcc/java/jcf-io.c | 28 +++------------------------- gcc/passes.c | 24 +----------------------- 10 files changed, 51 insertions(+), 119 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6389191c133..33c3c0d8ef8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2015-06-25 Richard Sandiford + + * hash-traits.h (string_hash, nofree_string_hash): New classes. + * genmatch.c (capture_id_map_hasher): Use nofree_string_hash. + * passes.c (pass_registry_hasher): Likewise. + * config/alpha/alpha.c (string_traits): Likewise. + * config/i386/winnt.c (i386_find_on_wrapper_list): Likewise. + * config/m32c/m32c.c (pragma_traits): Likewise. + * config/mep/mep.c (pragma_traits): Likewise. + 2015-06-25 Richard Sandiford * tree-hash-traits.h (tree_hash): New class. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 122f5861b43..39702783584 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -4806,13 +4806,7 @@ alpha_multipass_dfa_lookahead (void) struct GTY(()) alpha_links; -struct string_traits : default_hashmap_traits -{ - static bool equal_keys (const char *const &a, const char *const &b) - { - return strcmp (a, b) == 0; - } -}; +typedef simple_hashmap_traits string_traits; struct GTY(()) machine_function { diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c index 47ea87a3113..a30215bcd4b 100644 --- a/gcc/config/i386/winnt.c +++ b/gcc/config/i386/winnt.c @@ -707,29 +707,6 @@ i386_pe_record_stub (const char *name) #ifdef CXX_WRAP_SPEC_LIST -/* Hashtable helpers. */ - -struct wrapped_symbol_hasher : nofree_ptr_hash -{ - static inline hashval_t hash (const char *); - static inline bool equal (const char *, const char *); - static inline void remove (const char *); -}; - -inline hashval_t -wrapped_symbol_hasher::hash (const char *v) -{ - return htab_hash_string (v); -} - -/* Hash table equality helper function. */ - -inline bool -wrapped_symbol_hasher::equal (const char *x, const char *y) -{ - return !strcmp (x, y); -} - /* Search for a function named TARGET in the list of library wrappers we are using, returning a pointer to it if found or NULL if not. This function might be called on quite a few symbols, and we only @@ -741,7 +718,7 @@ static const char * i386_find_on_wrapper_list (const char *target) { static char first_time = 1; - static hash_table *wrappers; + static hash_table *wrappers; if (first_time) { @@ -754,7 +731,7 @@ i386_find_on_wrapper_list (const char *target) char *bufptr; /* Breaks up the char array into separated strings strings and enter them into the hash table. */ - wrappers = new hash_table (8); + wrappers = new hash_table (8); for (bufptr = wrapper_list_buffer; *bufptr; ++bufptr) { char *found = NULL; diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 83209aa2a37..7dd175363bc 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -3053,16 +3053,7 @@ m32c_insert_attributes (tree node ATTRIBUTE_UNUSED, } } - -struct pragma_traits : default_hashmap_traits -{ - static hashval_t hash (const char *str) { return htab_hash_string (str); } - static bool - equal_keys (const char *a, const char *b) - { - return !strcmp (a, b); - } -}; +typedef simple_hashmap_traits pragma_traits; /* Hash table of pragma info. */ static GTY(()) hash_map *pragma_htab; diff --git a/gcc/config/mep/mep.c b/gcc/config/mep/mep.c index 5f710e24105..3698bb06e19 100644 --- a/gcc/config/mep/mep.c +++ b/gcc/config/mep/mep.c @@ -4071,15 +4071,7 @@ struct GTY(()) pragma_entry { int flag; }; -struct pragma_traits : default_hashmap_traits -{ - static hashval_t hash (const char *s) { return htab_hash_string (s); } - static bool - equal_keys (const char *a, const char *b) - { - return strcmp (a, b) == 0; - } -}; +typedef simple_hashmap_traits pragma_traits; /* Hash table of farcall-tagged sections. */ static GTY(()) hash_map * diff --git a/gcc/genmatch.c b/gcc/genmatch.c index 265210517ed..b0b92904043 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -395,26 +395,7 @@ get_operator (const char *id) return 0; } - -/* Helper for the capture-id map. */ - -struct capture_id_map_hasher : default_hashmap_traits -{ - static inline hashval_t hash (const char *); - static inline bool equal_keys (const char *, const char *); -}; - -inline hashval_t -capture_id_map_hasher::hash (const char *id) -{ - return htab_hash_string (id); -} - -inline bool -capture_id_map_hasher::equal_keys (const char *id1, const char *id2) -{ - return strcmp (id1, id2) == 0; -} +typedef simple_hashmap_traits capture_id_map_hasher; typedef hash_map cid_map_t; diff --git a/gcc/hash-traits.h b/gcc/hash-traits.h index c580de9ddf9..8f97646f3e1 100644 --- a/gcc/hash-traits.h +++ b/gcc/hash-traits.h @@ -121,6 +121,27 @@ pointer_hash ::is_empty (Type *e) return e == NULL; } +/* Hasher for "const char *" strings, using string rather than pointer + equality. */ + +struct string_hash : pointer_hash +{ + static inline hashval_t hash (const char *); + static inline bool equal (const char *, const char *); +}; + +inline hashval_t +string_hash::hash (const char *id) +{ + return htab_hash_string (id); +} + +inline bool +string_hash::equal (const char *id1, const char *id2) +{ + return strcmp (id1, id2) == 0; +} + /* Remover and marker for entries in gc memory. */ template @@ -190,6 +211,11 @@ struct ggc_ptr_hash : pointer_hash , ggc_remove {}; template struct ggc_cache_ptr_hash : pointer_hash , ggc_cache_remove {}; +/* Traits for string elements that should not be freed when an element + is deleted. */ + +struct nofree_string_hash : string_hash, typed_noop_remove {}; + template struct default_hash_traits; template diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 6a9330481e4..96a5c6314fa 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2015-06-25 Richard Sandiford + + * jcf-io.c (memoized_class_lookups): Use nofree_string_hash. + (find_class): Likewise. + 2015-06-25 Richard Sandiford * java-tree.h (treetreehasher): Inherit from ggc_ptr_hash diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c index 91fe952fdb9..be251d462f1 100644 --- a/gcc/java/jcf-io.c +++ b/gcc/java/jcf-io.c @@ -272,33 +272,11 @@ find_classfile (char *filename, JCF *jcf, const char *dep_name) return open_class (filename, jcf, fd, dep_name); } - -/* Hash table helper. */ - -struct charstar_hash : nofree_ptr_hash -{ - static inline hashval_t hash (const char *candidate); - static inline bool equal (const char *existing, const char *candidate); -}; - -inline hashval_t -charstar_hash::hash (const char *candidate) -{ - return htab_hash_string (candidate); -} - -inline bool -charstar_hash::equal (const char *existing, const char *candidate) -{ - return strcmp (existing, candidate) == 0; -} - - /* A hash table keeping track of class names that were not found during class lookup. (There is no need to cache the values associated with names that were found; they are saved in IDENTIFIER_CLASS_VALUE.) */ -static hash_table *memoized_class_lookups; +static hash_table *memoized_class_lookups; /* Returns a freshly malloc'd string with the fully qualified pathname of the .class file for the class CLASSNAME. CLASSNAME must be @@ -321,11 +299,11 @@ find_class (const char *classname, int classname_length, JCF *jcf) /* Create the hash table, if it does not already exist. */ if (!memoized_class_lookups) - memoized_class_lookups = new hash_table (37); + memoized_class_lookups = new hash_table (37); /* Loop for this class in the hashtable. If it is present, we've already looked for this class and failed to find it. */ - hash = charstar_hash::hash (classname); + hash = nofree_string_hash::hash (classname); if (memoized_class_lookups->find_with_hash (classname, hash)) return NULL; diff --git a/gcc/passes.c b/gcc/passes.c index c66741e45b4..c0a90063bb8 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -858,29 +858,7 @@ pass_manager::register_dump_files (opt_pass *pass) while (pass); } -/* Helper for pass_registry hash table. */ - -struct pass_registry_hasher : default_hashmap_traits -{ - static inline hashval_t hash (const char *); - static inline bool equal_keys (const char *, const char *); -}; - -/* Pass registry hash function. */ - -inline hashval_t -pass_registry_hasher::hash (const char *name) -{ - return htab_hash_string (name); -} - -/* Hash equal function */ - -inline bool -pass_registry_hasher::equal_keys (const char *s1, const char *s2) -{ - return !strcmp (s1, s2); -} +typedef simple_hashmap_traits pass_registry_hasher; static hash_map *name_to_pass_map; -- 2.30.2