diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-06-25 17:16:31 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-06-25 17:16:31 +0000 |
commit | 1c9524603bf6207984cc21e7df6520e935a85e35 (patch) | |
tree | eb9aab7f683bba3d809945aaacf3498fdac77a75 /gcc | |
parent | 20d2c372c21b9f92b30428d7b545af320d7d2303 (diff) | |
download | gcc-1c9524603bf6207984cc21e7df6520e935a85e35.zip gcc-1c9524603bf6207984cc21e7df6520e935a85e35.tar.gz gcc-1c9524603bf6207984cc21e7df6520e935a85e35.tar.bz2 |
mips.c (mips16_flip_traits): Use it.
gcc/
* config/mips/mips.c (mips16_flip_traits): Use it.
(local_alias_traits, mips16_local_aliases): Convert from a map of
rtxes to a map of symbol names.
(mips16_local_alias): Update accordingly.
From-SVN: r224972
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 41 |
2 files changed, 15 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33c3c0d..3a639ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * config/mips/mips.c (mips16_flip_traits): Use it. + (local_alias_traits, mips16_local_aliases): Convert from a map of + rtxes to a map of symbol names. + (mips16_local_alias): Update accordingly. + +2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * 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. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 3e0adf0..c8374cf 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -1263,15 +1263,7 @@ static int mips_register_move_cost (machine_mode, reg_class_t, static unsigned int mips_function_arg_boundary (machine_mode, const_tree); static machine_mode mips_get_reg_raw_mode (int regno); -struct mips16_flip_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); - } -}; +struct mips16_flip_traits : simple_hashmap_traits <nofree_string_hash> {}; /* This hash table keeps track of implicit "mips16" and "nomips16" attributes for -mflip_mips16. It maps decl names onto a boolean mode setting. */ @@ -6597,30 +6589,13 @@ mips_load_call_address (enum mips_call_type type, rtx dest, rtx addr) } } -struct local_alias_traits : default_hashmap_traits -{ - static hashval_t hash (rtx); - static bool equal_keys (rtx, rtx); -}; +struct local_alias_traits : simple_hashmap_traits <nofree_string_hash> {}; /* Each locally-defined hard-float MIPS16 function has a local symbol associated with it. This hash table maps the function symbol (FUNC) to the local symbol (LOCAL). */ -static GTY (()) hash_map<rtx, rtx, local_alias_traits> *mips16_local_aliases; - -/* Hash table callbacks for mips16_local_aliases. */ - -hashval_t -local_alias_traits::hash (rtx func) -{ - return htab_hash_string (XSTR (func, 0)); -} - -bool -local_alias_traits::equal_keys (rtx func1, rtx func2) -{ - return rtx_equal_p (func1, func2); -} +static GTY (()) hash_map<const char *, rtx, local_alias_traits> + *mips16_local_aliases; /* FUNC is the symbol for a locally-defined hard-float MIPS16 function. Return a local alias for it, creating a new one if necessary. */ @@ -6631,23 +6606,23 @@ mips16_local_alias (rtx func) /* Create the hash table if this is the first call. */ if (mips16_local_aliases == NULL) mips16_local_aliases - = hash_map<rtx, rtx, local_alias_traits>::create_ggc (37); + = hash_map<const char *, rtx, local_alias_traits>::create_ggc (37); /* Look up the function symbol, creating a new entry if need be. */ bool existed; - rtx *slot = &mips16_local_aliases->get_or_insert (func, &existed); + const char *func_name = XSTR (func, 0); + rtx *slot = &mips16_local_aliases->get_or_insert (func_name, &existed); gcc_assert (slot != NULL); if (!existed) { - const char *func_name, *local_name; rtx local; /* Create a new SYMBOL_REF for the local symbol. The choice of __fn_local_* is based on the __fn_stub_* names that we've traditionally used for the non-MIPS16 stub. */ func_name = targetm.strip_name_encoding (XSTR (func, 0)); - local_name = ACONCAT (("__fn_local_", func_name, NULL)); + const char *local_name = ACONCAT (("__fn_local_", func_name, NULL)); local = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (local_name)); SYMBOL_REF_FLAGS (local) = SYMBOL_REF_FLAGS (func) | SYMBOL_FLAG_LOCAL; |