diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3dd61eb896a153279be5f4c8f803331790448aab..f97afe2b005c8ea5442a66cb217eb4109478b63f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-08-22 Roger Sayle <roger@eyesopen.com> + + * hashtable.c (ht_expand): Avoid calculating rehash for the common + case that the first probe hits an empty hash table slot. + 2003-08-22 Mark Mitchell <mark@codesourcery.com> * config/ia64/hpux.h (SUPPORTS_INIT_PRIORITY): Define to 0. diff --git a/gcc/hashtable.c b/gcc/hashtable.c index 41551394f8aa6dc35be116b4d32f132d33c6e226..58f19d055fc21c402146d581b584dcdfd639a47f 100644 --- a/gcc/hashtable.c +++ b/gcc/hashtable.c @@ -184,19 +184,18 @@ ht_expand (hash_table *table) unsigned int index, hash, hash2; hash = (*p)->hash_value; - hash2 = ((hash * 17) & sizemask) | 1; index = hash & sizemask; - for (;;) + if (nentries[index]) { - if (! nentries[index]) + hash2 = ((hash * 17) & sizemask) | 1; + do { - nentries[index] = *p; - break; + index = (index + hash2) & sizemask; } - - index = (index + hash2) & sizemask; + while (nentries[index]); } + nentries[index] = *p; } while (++p < limit);