This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug lto/50165] [4.7 Regression] Huge build time regression (Firefox lto build)


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50165

--- Comment #3 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2011-08-24 09:53:24 UTC ---
The following patch fixes the problem for me:

diff --git a/gcc/data-streamer.h b/gcc/data-streamer.h
index c413a75..acf1305 100644
--- a/gcc/data-streamer.h
+++ b/gcc/data-streamer.h
@@ -92,12 +92,7 @@ static inline hashval_t
 hash_string_slot_node (const void *p)
 {
   const struct string_slot *ds = (const struct string_slot *) p;
-  hashval_t r = ds->len;
-  int i;
-
-  for (i = 0; i < ds->len; i++)
-     r = r * 67 + (unsigned)ds->s[i] - 113;
-  return r;
+  return (hashval_t) htab_hash_string (ds->s);
 }

 /* Returns nonzero if P1 and P2 are equal.  */
@@ -107,11 +102,7 @@ eq_string_slot_node (const void *p1, const void *p2)
 {
   const struct string_slot *ds1 = (const struct string_slot *) p1;
   const struct string_slot *ds2 = (const struct string_slot *) p2;
-
-  if (ds1->len == ds2->len)
-    return memcmp (ds1->s, ds2->s, ds1->len) == 0;
-
-  return 0;
+  return strcmp (ds1->s, ds2->s) == 0;
 }

 /* Returns a new bit-packing context for bit-packing into S.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]