summaryrefslogtreecommitdiffstats
path: root/libiberty
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2003-03-12 14:15:09 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2003-03-12 14:15:09 +0000
commitb9af005f3303fca988bbf8c4816e6c4ee7737c15 (patch)
tree185c9ce9c769ea7a3f9729796fff47cc59493df1 /libiberty
parente72ec9a82fefdc8889f91f8bfa34c01346ddf4cb (diff)
downloadppe42-gcc-b9af005f3303fca988bbf8c4816e6c4ee7737c15.tar.gz
ppe42-gcc-b9af005f3303fca988bbf8c4816e6c4ee7737c15.zip
* hashtab.c (htab_expand): Compute the size of hashtable based
on the number of elements actually used. (htab_traverse): Call htab_expand when table is too empty. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@64246 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog6
-rw-r--r--libiberty/hashtab.c19
2 files changed, 22 insertions, 3 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index c863114f0be..16d0b98e123 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,9 @@
+2003-12-03 Jan Hubicka <jh@suse.cz>
+
+ * hashtab.c (htab_expand): Compute the size of hashtable based
+ on the number of elements actually used.
+ (htab_traverse): Call htab_expand when table is too empty.
+
2003-03-11 Carlo Wood <carlo@gnu.org>
* cplus-dem.c (demangle_integral_value): Correction to reflect
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
index 0429936e961..a0cb5a75820 100644
--- a/libiberty/hashtab.c
+++ b/libiberty/hashtab.c
@@ -373,7 +373,14 @@ htab_expand (htab)
oentries = htab->entries;
olimit = oentries + htab->size;
- nsize = higher_prime_number (htab->size * 2);
+ /* Resize only when table after removal of unused elements is either
+ too full or too empty. */
+ if ((htab->n_elements - htab->n_deleted) * 2 > htab->size
+ || (htab->n_elements - htab->n_deleted) * 8 < htab->size
+ && htab->size > 32)
+ nsize = higher_prime_number ((htab->n_elements - htab->n_deleted) * 2);
+ else
+ nsize = htab->size;
if (htab->alloc_with_arg_f != NULL)
nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
@@ -601,8 +608,14 @@ htab_traverse (htab, callback, info)
htab_trav callback;
PTR info;
{
- PTR *slot = htab->entries;
- PTR *limit = slot + htab->size;
+ PTR *slot;
+ PTR *limit;
+
+ if ((htab->n_elements - htab->n_deleted) * 8 < htab->size)
+ htab_expand (htab);
+
+ slot = htab->entries;
+ limit = slot + htab->size;
do
{
OpenPOWER on IntegriCloud