diff options
author | Trevor Saunders <tsaunders@mozilla.com> | 2014-10-12 22:22:53 +0000 |
---|---|---|
committer | Trevor Saunders <tbsaunde@gcc.gnu.org> | 2014-10-12 22:22:53 +0000 |
commit | 2a22f99cb12d82712dd93cfef808b1cef543601b (patch) | |
tree | c828063f153ceb609ce5c7d44ea9f00391b32950 /gcc/optabs.c | |
parent | 7b262a51ea2310bdb6cc901de00f04b0e7be0a4e (diff) | |
download | gcc-2a22f99cb12d82712dd93cfef808b1cef543601b.zip gcc-2a22f99cb12d82712dd93cfef808b1cef543601b.tar.gz gcc-2a22f99cb12d82712dd93cfef808b1cef543601b.tar.bz2 |
move many gc hashtab to hash_table
gcc/
* asan.c, cfgloop.c, cfgloop.h, cgraph.c, cgraph.h,
config/darwin.c, config/m32c/m32c.c, config/mep/mep.c,
config/mips/mips.c, config/rs6000/rs6000.c, dwarf2out.c,
function.c, function.h, gimple-ssa.h, libfuncs.h, optabs.c,
output.h, rtl.h, sese.c, symtab.c, tree-cfg.c, tree-dfa.c,
tree-ssa.c, varasm.c: Use hash-table instead of hashtab.
* doc/gty.texi (for_user): Document new option.
* gengtype.c (create_user_defined_type): Don't try to get a struct for
char.
(walk_type): Don't error out on for_user option.
(write_func_for_structure): Emit user marking routines if requested by
for_user option.
(write_local_func_for_structure): Likewise.
(main): Mark types with for_user option as used.
* ggc.h (gt_pch_nx): Add overload for unsigned int.
* hash-map.h (hash_map::hash_entry::pch_nx_helper): AddOverloads.
* hash-table.h (ggc_hasher): New struct.
(hash_table::create_ggc): New function.
(gt_pch_nx): New overload for hash_table.
java/
* class.c, decl.c, except.c, expr.c, java-tree.h, lang.c: Use
hash_table instead of hashtab.
objc/
* objc-act.c: use hash_table instead of hashtab.
cp/
* cp-gimplify.c, cp-tree.h, decl.c, mangle.c, name-lookup.c,
pt.c, semantics.c, tree.c, typeck2.c: Use hash_table instead of
hashtab.
fortran/
* trans-decl.c, trans.c, trans.h: Use hash_table instead of hashtab.
c-family/
* c-common.c: Use hash_table instead of hashtab.
From-SVN: r216127
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 70 |
1 files changed, 32 insertions, 38 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index 605615d..d55a6bb 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see #include "insn-config.h" #include "rtl.h" #include "tree.h" +#include "tree-hasher.h" #include "stor-layout.h" #include "stringpool.h" #include "varasm.h" @@ -73,20 +74,17 @@ void debug_optab_libfuncs (void); /* Used for libfunc_hash. */ -static hashval_t -hash_libfunc (const void *p) +hashval_t +libfunc_hasher::hash (libfunc_entry *e) { - const struct libfunc_entry *const e = (const struct libfunc_entry *) p; return ((e->mode1 + e->mode2 * NUM_MACHINE_MODES) ^ e->op); } /* Used for libfunc_hash. */ -static int -eq_libfunc (const void *p, const void *q) +bool +libfunc_hasher::equal (libfunc_entry *e1, libfunc_entry *e2) { - const struct libfunc_entry *const e1 = (const struct libfunc_entry *) p; - const struct libfunc_entry *const e2 = (const struct libfunc_entry *) q; return e1->op == e2->op && e1->mode1 == e2->mode1 && e1->mode2 == e2->mode2; } @@ -109,8 +107,7 @@ convert_optab_libfunc (convert_optab optab, enum machine_mode mode1, e.op = optab; e.mode1 = mode1; e.mode2 = mode2; - slot = (struct libfunc_entry **) - htab_find_slot (libfunc_hash, &e, NO_INSERT); + slot = libfunc_hash->find_slot (&e, NO_INSERT); if (!slot) { const struct convert_optab_libcall_d *d @@ -120,8 +117,7 @@ convert_optab_libfunc (convert_optab optab, enum machine_mode mode1, return NULL; d->libcall_gen (optab, d->libcall_basename, mode1, mode2); - slot = (struct libfunc_entry **) - htab_find_slot (libfunc_hash, &e, NO_INSERT); + slot = libfunc_hash->find_slot (&e, NO_INSERT); if (!slot) return NULL; } @@ -146,8 +142,7 @@ optab_libfunc (optab optab, enum machine_mode mode) e.op = optab; e.mode1 = mode; e.mode2 = VOIDmode; - slot = (struct libfunc_entry **) - htab_find_slot (libfunc_hash, &e, NO_INSERT); + slot = libfunc_hash->find_slot (&e, NO_INSERT); if (!slot) { const struct optab_libcall_d *d @@ -157,8 +152,7 @@ optab_libfunc (optab optab, enum machine_mode mode) return NULL; d->libcall_gen (optab, d->libcall_basename, d->libcall_suffix, mode); - slot = (struct libfunc_entry **) - htab_find_slot (libfunc_hash, &e, NO_INSERT); + slot = libfunc_hash->find_slot (&e, NO_INSERT); if (!slot) return NULL; } @@ -6100,22 +6094,25 @@ gen_satfractuns_conv_libfunc (convert_optab tab, gen_interclass_conv_libfunc (tab, opname, tmode, fmode); } -/* A table of previously-created libfuncs, hashed by name. */ -static GTY ((param_is (union tree_node))) htab_t libfunc_decls; - /* Hashtable callbacks for libfunc_decls. */ -static hashval_t -libfunc_decl_hash (const void *entry) +struct libfunc_decl_hasher : ggc_hasher<tree> { - return IDENTIFIER_HASH_VALUE (DECL_NAME ((const_tree) entry)); -} + static hashval_t + hash (tree entry) + { + return IDENTIFIER_HASH_VALUE (DECL_NAME (entry)); + } -static int -libfunc_decl_eq (const void *entry1, const void *entry2) -{ - return DECL_NAME ((const_tree) entry1) == (const_tree) entry2; -} + static bool + equal (tree decl, tree name) + { + return DECL_NAME (decl) == name; + } +}; + +/* A table of previously-created libfuncs, hashed by name. */ +static GTY (()) hash_table<libfunc_decl_hasher> *libfunc_decls; /* Build a decl for a libfunc named NAME. */ @@ -6143,18 +6140,16 @@ rtx init_one_libfunc (const char *name) { tree id, decl; - void **slot; hashval_t hash; if (libfunc_decls == NULL) - libfunc_decls = htab_create_ggc (37, libfunc_decl_hash, - libfunc_decl_eq, NULL); + libfunc_decls = hash_table<libfunc_decl_hasher>::create_ggc (37); /* See if we have already created a libfunc decl for this function. */ id = get_identifier (name); hash = IDENTIFIER_HASH_VALUE (id); - slot = htab_find_slot_with_hash (libfunc_decls, id, hash, INSERT); - decl = (tree) *slot; + tree *slot = libfunc_decls->find_slot_with_hash (id, hash, INSERT); + decl = *slot; if (decl == NULL) { /* Create a new decl, so that it can be passed to @@ -6171,12 +6166,11 @@ rtx set_user_assembler_libfunc (const char *name, const char *asmspec) { tree id, decl; - void **slot; hashval_t hash; id = get_identifier (name); hash = IDENTIFIER_HASH_VALUE (id); - slot = htab_find_slot_with_hash (libfunc_decls, id, hash, NO_INSERT); + tree *slot = libfunc_decls->find_slot_with_hash (id, hash, NO_INSERT); gcc_assert (slot); decl = (tree) *slot; set_user_assembler_name (decl, asmspec); @@ -6200,7 +6194,7 @@ set_optab_libfunc (optab op, enum machine_mode mode, const char *name) val = init_one_libfunc (name); else val = 0; - slot = (struct libfunc_entry **) htab_find_slot (libfunc_hash, &e, INSERT); + slot = libfunc_hash->find_slot (&e, INSERT); if (*slot == NULL) *slot = ggc_alloc<libfunc_entry> (); (*slot)->op = op; @@ -6228,7 +6222,7 @@ set_conv_libfunc (convert_optab optab, enum machine_mode tmode, val = init_one_libfunc (name); else val = 0; - slot = (struct libfunc_entry **) htab_find_slot (libfunc_hash, &e, INSERT); + slot = libfunc_hash->find_slot (&e, INSERT); if (*slot == NULL) *slot = ggc_alloc<libfunc_entry> (); (*slot)->op = optab; @@ -6244,9 +6238,9 @@ void init_optabs (void) { if (libfunc_hash) - htab_empty (libfunc_hash); + libfunc_hash->empty (); else - libfunc_hash = htab_create_ggc (10, hash_libfunc, eq_libfunc, NULL); + libfunc_hash = hash_table<libfunc_hasher>::create_ggc (10); /* Fill in the optabs with the insns we support. */ init_all_optabs (this_fn_optabs); |