re PR middle-end/28071 (A file that can not be compiled in reasonable time/space)

PR rtl-optimization/28071
	* hashtab.c (htab_empty): Clear out n_deleted/n_elements;
	downsize the hashtable.

From-SVN: r115779
This commit is contained in:
Jan Hubicka 2006-07-27 19:10:07 +02:00 committed by Jan Hubicka
parent 96d0cc8186
commit 3050098b16
2 changed files with 28 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2006-07-27 Jan Hubicka <jh@suse.cz>
PR rtl-optimization/28071
* hashtab.c (htab_empty): Clear out n_deleted/n_elements;
downsize the hashtable.
2006-07-04 Peter O'Gorman <peter@pogma.com>
* Makefile.in: chmod 644 before ranlib during install.

View File

@ -421,7 +421,28 @@ htab_empty (htab_t htab)
if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
(*htab->del_f) (entries[i]);
memset (entries, 0, size * sizeof (PTR));
/* Instead of clearing megabyte, downsize the table. */
if (size > 1024*1024 / sizeof (PTR))
{
int nindex = higher_prime_index (1024 / sizeof (PTR));
int nsize = prime_tab[nindex].prime;
if (htab->free_f != NULL)
(*htab->free_f) (htab->entries);
else if (htab->free_with_arg_f != NULL)
(*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);
if (htab->alloc_with_arg_f != NULL)
htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
sizeof (PTR *));
else
htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
htab->size = nsize;
htab->size_prime_index = nindex;
}
else
memset (entries, 0, size * sizeof (PTR));
htab->n_deleted = 0;
htab->n_elements = 0;
}
/* Similar to htab_find_slot, but without several unwanted side effects: