aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorLawrence Crowl <crowl@google.com>2012-10-09 21:21:36 +0000
committerLawrence Crowl <crowl@gcc.gnu.org>2012-10-09 21:21:36 +0000
commit703c8606fa58f4c827deda50f641da57294cc78e (patch)
tree6b83efb5a5d730e31c6760ce9e20be32071b13a4 /gcc/java
parentaa4723d7f56dd0c690c514b50c917c827a3d56dd (diff)
downloadgcc-703c8606fa58f4c827deda50f641da57294cc78e.zip
gcc-703c8606fa58f4c827deda50f641da57294cc78e.tar.gz
gcc-703c8606fa58f4c827deda50f641da57294cc78e.tar.bz2
Change more non-GTY hash tables to use the new type-safe template hash table.
Constify member function parameters that can be const. Correct a couple of expressions in formerly uninstantiated templates. The new code is 0.362% faster in bootstrap, with a 99.5% confidence of being faster. Tested on x86-64. Index: gcc/java/ChangeLog 2012-10-01 Lawrence Crowl <crowl@google.com> * Make-lang.in (JAVA_OBJS): Add dependence on hash-table.o. (JCFDUMP_OBJS): Add dependence on hash-table.o. (jcf-io.o): Add dependence on hash-table.h. * jcf-io.c (memoized_class_lookups): Change to use type-safe hash table. Index: gcc/c/ChangeLog 2012-10-09 Lawrence Crowl <crowl@google.com> * Make-lang.in (c-decl.o): Add dependence on hash-table.h. * c-decl.c (detect_field_duplicates_hash): Change to new type-safe hash table. Index: gcc/objc/ChangeLog 2012-10-01 Lawrence Crowl <crowl@google.com> * Make-lang.in (OBJC_OBJS): Add dependence on hash-table.o. (objc-act.o): Add dependence on hash-table.h. * objc-act.c (objc_detect_field_duplicates): Change to new type-safe hash table. Index: gcc/ChangeLog 2012-10-09 Lawrence Crowl <crowl@google.com> * Makefile.in (fold-const.o): Add depencence on hash-table.h. (dse.o): Likewise. (cfg.o): Likewise. * fold-const.c (fold_checksum_tree): Change to new type-safe hash table. * (print_fold_checksum): Likewise. * cfg.c (var bb_original): Likewise. * (var bb_copy): Likewise. * (var loop_copy): Likewise. * hash-table.h (template hash_table): Constify parameters for find... and remove_elt... member functions. (hash_table::empty) Correct size expression. (hash_table::clear_slot) Correct deleted entry assignment. * dse.c (var rtx_group_table): Change to new type-safe hash table. Index: gcc/cp/ChangeLog 2012-10-09 Lawrence Crowl <crowl@google.com> * Make-lang.in (class.o): Add dependence on hash-table.h. (tree.o): Likewise. (semantics.o): Likewise. * class.c (fixed_type_or_null): Change to new type-safe hash table. * tree.c (verify_stmt_tree): Likewise. (verify_stmt_tree_r): Likewise. * semantics.c (struct nrv_data): Likewise. From-SVN: r192273
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog7
-rw-r--r--gcc/java/Make-lang.in6
-rw-r--r--gcc/java/jcf-io.c43
3 files changed, 37 insertions, 19 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 96c9df9..190d48c 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,10 @@
+2012-10-01 Lawrence Crowl <crowl@google.com>
+
+ * Make-lang.in (JAVA_OBJS): Add dependence on hash-table.o.
+ (JCFDUMP_OBJS): Add dependence on hash-table.o.
+ (jcf-io.o): Add dependence on hash-table.h.
+ * jcf-io.c (memoized_class_lookups): Change to use type-safe hash table.
+
2012-09-24 Lawrence Crowl <crowl@google.com>
* decl.c (java_init_decl_processing): Change to new double_int API.
diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in
index 77de0d3..390782d 100644
--- a/gcc/java/Make-lang.in
+++ b/gcc/java/Make-lang.in
@@ -83,10 +83,10 @@ JAVA_OBJS = java/class.o java/decl.o java/expr.o \
java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o java/mangle.o \
java/mangle_name.o java/builtins.o java/resource.o \
java/jcf-depend.o \
- java/jcf-path.o java/boehm.o java/java-gimplify.o
+ java/jcf-path.o java/boehm.o java/java-gimplify.o hash-table.o
JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
- java/win32-host.o java/zextract.o ggc-none.o
+ java/win32-host.o java/zextract.o ggc-none.o hash-table.o
JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o
@@ -326,7 +326,7 @@ java/java-gimplify.o: java/java-gimplify.c $(CONFIG_H) $(SYSTEM_H) \
# jcf-io.o needs $(ZLIBINC) added to cflags.
CFLAGS-java/jcf-io.o += $(ZLIBINC)
java/jcf-io.o: java/jcf-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
- $(JAVA_TREE_H) java/zipfile.h
+ $(JAVA_TREE_H) java/zipfile.h $(HASH_TABLE_H)
# jcf-path.o needs a -D.
CFLAGS-java/jcf-path.o += \
diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c
index 0fe30b3..97a3c0f 100644
--- a/gcc/java/jcf-io.c
+++ b/gcc/java/jcf-io.c
@@ -31,7 +31,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#include "jcf.h"
#include "tree.h"
#include "java-tree.h"
-#include "hashtab.h"
+#include "hash-table.h"
#include <dirent.h>
#include "zlib.h"
@@ -271,20 +271,34 @@ find_classfile (char *filename, JCF *jcf, const char *dep_name)
return open_class (filename, jcf, fd, dep_name);
}
-/* Returns 1 if the CLASSNAME (really a char *) matches the name
- stored in TABLE_ENTRY (also a char *). */
-static int
-memoized_class_lookup_eq (const void *table_entry, const void *classname)
+/* Hash table helper. */
+
+struct charstar_hash : typed_noop_remove <char>
+{
+ typedef const char T;
+ static inline hashval_t hash (const T *candidate);
+ static inline bool equal (const T *existing, const T *candidate);
+};
+
+inline hashval_t
+charstar_hash::hash (const T *candidate)
{
- return strcmp ((const char *)classname, (const char *)table_entry) == 0;
+ return htab_hash_string (candidate);
}
+inline bool
+charstar_hash::equal (const T *existing, const T *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 htab_t memoized_class_lookups;
+static hash_table <charstar_hash> 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
@@ -306,16 +320,13 @@ find_class (const char *classname, int classname_length, JCF *jcf)
hashval_t hash;
/* Create the hash table, if it does not already exist. */
- if (!memoized_class_lookups)
- memoized_class_lookups = htab_create (37,
- htab_hash_string,
- memoized_class_lookup_eq,
- NULL);
+ if (!memoized_class_lookups.is_created ())
+ memoized_class_lookups.create (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 = htab_hash_string (classname);
- if (htab_find_with_hash (memoized_class_lookups, classname, hash))
+ hash = charstar_hash::hash (classname);
+ if (memoized_class_lookups.find_with_hash (classname, hash))
return NULL;
/* Allocate and zero out the buffer, since we don't explicitly put a
@@ -390,8 +401,8 @@ find_class (const char *classname, int classname_length, JCF *jcf)
/* Remember that this class could not be found so that we do not
have to look again. */
- *htab_find_slot_with_hash (memoized_class_lookups, classname, hash, INSERT)
- = (void *) CONST_CAST (char *, classname);
+ *memoized_class_lookups.find_slot_with_hash (classname, hash, INSERT)
+ = classname;
return NULL;
found: