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
This commit is contained in:
parent
20d2c372c2
commit
1c9524603b
|
@ -1,3 +1,10 @@
|
|||
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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue