conflict.c (conflict_graph_add): Pass enum type to htab_find_slot.

* gcc/conflict.c (conflict_graph_add): Pass enum type to
	htab_find_slot.
	* gcc/cpperror.c (hashtab.h): Now include.
	* gcc/cppexp.c (hashtab.h): Likewise.
	* gcc/cpplex.c (hashtab.h): Likewise.
	* gcc/cppfiles.c (hashtab.h): Likewise.
	(find_include_file, _cpp_calc_hash, cpp_read_file): Pass enum type
	to htab_find_slot_with_hash.
	* gcc/cpphash.c (hashtab.h): Now include.
	(_cpp_lookup_slot): INSERT is now enum insert_option.
	* gcc/cpphash.h (_cpp_lookup_slot): Likewise.
	* gcc/cppinit.c (hashtab.h): Include earlier.
	(initialize_builtins): Pass enum to htab_find_slot.
	* gcc/cpplib.c (hashtab.h): Now include.
	(do_define, do_undef): Pass enum type to _cpp_lookup_slot.
	(do_pragma_poison, do_assert): Likewise.
	* gcc/emit-rtl.c (gen_rtx_CONST_INT): Pass enum to
	htab_find_slot_with_hash.
	* gcc/simplify-rtx.c (cselib_lookup_mem, cselib_lookup): Likewise.
	* gcc/tree.c (type_hash_add): Likewise.
	(build1): Minor cleanup.
	* include/hashtab.h (enum insert_option): New type.
	(htab_find_slot, htab_find_slot_with_hash): Use it.
	* libiberty/hashtab.c: Various minor cleanups.
	(htab_find_slot_with_hash): INSERT is now enum insert_option.
	(htab_find_slot): Likewise.

From-SVN: r33236
This commit is contained in:
Richard Kenner 2000-04-18 20:42:00 +00:00 committed by Richard Kenner
parent 0d9eb3ba29
commit e38992e8d3
15 changed files with 149 additions and 105 deletions

View File

@ -1,3 +1,41 @@
Tue Apr 18 14:16:47 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* conflict.c (conflict_graph_add): Pass enum type to htab_find_slot.
* cpperror.c (hashtab.h): Now include.
* cppexp.c (hashtab.h): Likewise.
* cpplex.c (hashtab.h): Likewise.
* cppfiles.c (hashtab.h): Likewise.
(find_include_file, _cpp_calc_hash, cpp_read_file): Pass enum type
to htab_find_slot_with_hash.
* cpphash.c (hashtab.h): Now include.
(_cpp_lookup_slot): INSERT is now enum insert_option.
* cpphash.h (_cpp_lookup_slot): Likewise.
* cppinit.c (hashtab.h): Include earlier.
(initialize_builtins): Pass enum to htab_find_slot.
* cpplib.c (hashtab.h): Now include.
(do_define, do_undef): Pass enum type to _cpp_lookup_slot.
(do_pragma_poison, do_assert): Likewise.
* emit-rtl.c (gen_rtx_CONST_INT): Pass enum to
htab_find_slot_with_hash.
* simplify-rtx.c (cselib_lookup_mem, cselib_lookup): Likewise.
* tree.c (type_hash_add): Likewise.
(build1): Minor cleanup.
* ggc-common.c: Add missing blanks.
* print-tree.c (print_node): Print DECL_OFFSET_ALIGN.
* tree.h (DECL_OFFSET_ALIGN): Fix typo in comment.
* stmt.c (mark_case_node): New function.
(mark_case_nesting): Call it.
* expmed.c (emit_store_flag): If comparing two-word integer
with zero, can optimize NE, EQ, GE, and LT.
* c-decl.c (mark_binding_level): Use 'for' instead of `while'.
* conflict.c: Minor cleanups.
* optabs.c: Add blank line
* simplify-rtx.c: Minor cleanups.
2000-04-18 Stan Cox <scox@cygnus.com>
* gengenrtl.c (genlegend): Fix misspelling.
@ -20,23 +58,6 @@
(OLD_CC): Likewise.
* config/m68k/x-ccur (X_CFLAGS): Likewise.
Tue Apr 18 14:16:47 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* ggc-common.c: Add missing blanks.
* print-tree.c (print_node): Print DECL_OFFSET_ALIGN.
* tree.h (DECL_OFFSET_ALIGN): Fix typo in comment.
* stmt.c (mark_case_node): New function.
(mark_case_nesting): Call it.
* expmed.c (emit_store_flag): If comparing two-word integer
with zero, can optimize NE, EQ, GE, and LT.
* c-decl.c (mark_binding_level): Use 'for' instead of `while'.
* conflict.c: Minor cleanups.
* optabs.c: Add blank line
* simplify-rtx.c: Minor cleanups.
2000-04-18 Mark Mitchell <mark@codesourcery.com>
* cpplex.c (_cpp_lex_token): Don't call CPP_BUMP_LINE when the

View File

@ -25,6 +25,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "config.h"
#include "system.h"
#include "hashtab.h"
#include "cpplib.h"
#include "cpphash.h"
#include "intl.h"

View File

@ -1,5 +1,6 @@
/* Parse C expressions for cpplib.
Copyright (C) 1987, 92, 94, 95, 97, 98, 1999, 2000 Free Software Foundation.
Contributed by Per Bothner, 1994.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@ -14,19 +15,14 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding!
Written by Per Bothner 1994. */
Boston, MA 02111-1307, USA. */
/* Parse a C expression from text in a string */
#include "config.h"
#include "system.h"
#include "cpplib.h"
#include "hashtab.h"
#include "cpphash.h"
#ifndef CHAR_TYPE_SIZE

View File

@ -18,17 +18,13 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding! */
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "hashtab.h"
#include "cpplib.h"
#include "cpphash.h"
#include "hashtab.h"
#include "intl.h"
#include "mkdeps.h"
@ -263,8 +259,8 @@ find_include_file (pfile, fname, search_start, ihash, before)
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
path = (fname[0] == '/') ? ABSOLUTE_PATH : search_start;
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
(const void *)&dummy,
dummy.hash, 1);
(const void *) &dummy,
dummy.hash, INSERT);
if (*slot && (ih = redundant_include_p (pfile, *slot, path)))
{
@ -333,8 +329,8 @@ _cpp_fake_ihash (pfile, fname)
dummy.nshort = fname;
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
(const void *)&dummy,
dummy.hash, 1);
(const void *) &dummy,
dummy.hash, INSERT);
if (*slot)
return (*slot)->name;
ih = make_IHASH (fname, 0, ABSOLUTE_PATH, dummy.hash, slot);
@ -670,10 +666,10 @@ cpp_read_file (pfile, fname)
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
(const void *) &dummy,
dummy.hash, 1);
dummy.hash, INSERT);
if (*slot && (ih = redundant_include_p (pfile, *slot, ABSOLUTE_PATH)))
{
if (ih == (IHASH *)-1)
if (ih == (IHASH *) -1)
return 1; /* Already included. */
}
else

View File

@ -26,8 +26,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "config.h"
#include "system.h"
#include "cpplib.h"
#include "cpphash.h"
#include "hashtab.h"
#include "cpphash.h"
#undef abort
static unsigned int hash_HASHNODE PARAMS ((const void *));
@ -200,12 +201,13 @@ _cpp_lookup (pfile, name, len)
}
/* Find the hashtable slot for name "name". Used to insert or delete. */
HASHNODE **
_cpp_lookup_slot (pfile, name, len, insert, hash)
cpp_reader *pfile;
const U_CHAR *name;
int len;
int insert;
enum insert_option insert;
unsigned long *hash;
{
const U_CHAR *bp;
@ -214,7 +216,9 @@ _cpp_lookup_slot (pfile, name, len, insert, hash)
if (len < 0)
{
for (bp = name; is_idchar (*bp); bp++);
for (bp = name; is_idchar (*bp); bp++)
;
len = bp - name;
}
@ -223,7 +227,7 @@ _cpp_lookup_slot (pfile, name, len, insert, hash)
dummy.hash = _cpp_calc_hash (name, len);
slot = (HASHNODE **) htab_find_slot_with_hash (pfile->hashtab,
(void *)&dummy,
(void *) &dummy,
dummy.hash, insert);
if (insert)
*hash = dummy.hash;

View File

@ -274,7 +274,8 @@ extern unsigned int _cpp_calc_hash PARAMS ((const U_CHAR *, size_t));
extern HASHNODE *_cpp_lookup PARAMS ((cpp_reader *,
const U_CHAR *, int));
extern HASHNODE **_cpp_lookup_slot PARAMS ((cpp_reader *,
const U_CHAR *, int, int,
const U_CHAR *, int,
enum insert_option,
unsigned long *));
extern void _cpp_free_definition PARAMS ((DEFINITION *));
extern DEFINITION *_cpp_create_definition PARAMS ((cpp_reader *, int));

View File

@ -21,14 +21,13 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "hashtab.h"
#include "cpplib.h"
#include "cpphash.h"
#include "output.h"
#include "prefix.h"
#include "intl.h"
#include "version.h"
#include "hashtab.h"
#include "mkdeps.h"
/* Predefined symbols, built-in macros, and the default include path. */
@ -683,7 +682,7 @@ initialize_builtins (pfile)
hp = _cpp_make_hashnode (b->name, len, b->type,
_cpp_calc_hash (b->name, len));
hp->value.cpval = val;
*(htab_find_slot (pfile->hashtab, (void *)hp, 1)) = hp;
*(htab_find_slot (pfile->hashtab, (void *) hp, INSERT)) = hp;
if ((b->flags & DUMP) && CPP_OPTION (pfile, debug_output))
dump_special_to_buffer (pfile, b->name);

View File

@ -22,6 +22,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "intl.h"
#include "hashtab.h"
#include "cpplib.h"
#include "cpphash.h"

View File

@ -22,6 +22,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "hashtab.h"
#include "cpplib.h"
#include "cpphash.h"
#include "hashtab.h"
@ -392,7 +393,7 @@ do_define (pfile)
goto out;
}
slot = _cpp_lookup_slot (pfile, sym, len, 1, &hash);
slot = _cpp_lookup_slot (pfile, sym, len, INSERT, &hash);
if (*slot)
{
int ok;
@ -770,7 +771,7 @@ do_undef (pfile)
name = pfile->token_buffer + here;
CPP_SET_WRITTEN (pfile, here);
slot = _cpp_lookup_slot (pfile, name, len, 0, 0);
slot = _cpp_lookup_slot (pfile, name, len, NO_INSERT, 0);
if (slot)
{
HASHNODE *hp = *slot;
@ -1028,7 +1029,7 @@ do_pragma_poison (pfile)
p = pfile->token_buffer + written;
len = strlen (p);
slot = _cpp_lookup_slot (pfile, p, len, 1, &hash);
slot = _cpp_lookup_slot (pfile, p, len, INSERT, &hash);
if (*slot)
{
HASHNODE *hp = *slot;
@ -1586,14 +1587,14 @@ do_assert (pfile)
sym = pfile->token_buffer + old_written;
blen = (U_CHAR *) strchr (sym, '(') - sym;
tslot = _cpp_lookup_slot (pfile, sym, tlen, 1, &thash);
tslot = _cpp_lookup_slot (pfile, sym, tlen, INSERT, &thash);
if (*tslot)
{
cpp_warning (pfile, "%s re-asserted", sym);
goto error;
}
bslot = _cpp_lookup_slot (pfile, sym, blen, 1, &bhash);
bslot = _cpp_lookup_slot (pfile, sym, blen, INSERT, &bhash);
if (! *bslot)
{
*bslot = base = _cpp_make_hashnode (sym, blen, T_ASSERT, bhash);

View File

@ -248,7 +248,8 @@ gen_rtx_CONST_INT (mode, arg)
#endif
/* Look up the CONST_INT in the hash table. */
slot = htab_find_slot_with_hash (const_int_htab, &arg, (hashval_t) arg, 1);
slot = htab_find_slot_with_hash (const_int_htab, &arg,
(hashval_t) arg, INSERT);
if (*slot == 0)
{
if (!ggc_p)

View File

@ -2662,7 +2662,7 @@ cselib_lookup_mem (x, create)
mem_elt = new_cselib_val (++next_unknown_value, GET_MODE (x));
add_mem_for_addr (addr, mem_elt, x);
slot = htab_find_slot_with_hash (hash_table, x, mem_elt->value, 1);
slot = htab_find_slot_with_hash (hash_table, x, mem_elt->value, INSERT);
*slot = mem_elt;
return mem_elt;
}
@ -2782,7 +2782,7 @@ cselib_lookup (x, mode, create)
e = new_cselib_val (++next_unknown_value, GET_MODE (x));
e->locs = new_elt_loc_list (e->locs, x);
REG_VALUES (i) = new_elt_list (REG_VALUES (i), e);
slot = htab_find_slot_with_hash (hash_table, x, e->value, 1);
slot = htab_find_slot_with_hash (hash_table, x, e->value, INSERT);
*slot = e;
return e;
}
@ -2795,7 +2795,8 @@ cselib_lookup (x, mode, create)
if (! hashval)
return 0;
slot = htab_find_slot_with_hash (hash_table, x, hashval, create);
slot = htab_find_slot_with_hash (hash_table, x, hashval,
create ? INSERT : NO_INSERT);
if (slot == 0)
return 0;

View File

@ -1,3 +1,8 @@
Tue Apr 18 16:22:30 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* hashtab.h (enum insert_option): New type.
(htab_find_slot, htab_find_slot_with_hash): Use it.
2000-04-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* symcat.h: Honor autoconf macro HAVE_STRINGIZE. Add

View File

@ -102,6 +102,9 @@ struct htab
typedef struct htab *htab_t;
/* An enum saying whether we insert into the hash table or not. */
enum insert_option {NO_INSERT, INSERT};
/* The prototypes of the package functions. */
extern htab_t htab_create PARAMS ((size_t, htab_hash,
@ -110,11 +113,13 @@ extern void htab_delete PARAMS ((htab_t));
extern void htab_empty PARAMS ((htab_t));
extern void *htab_find PARAMS ((htab_t, const void *));
extern void **htab_find_slot PARAMS ((htab_t, const void *, int));
extern void *htab_find_with_hash PARAMS ((htab_t, const void *,
hashval_t));
extern void **htab_find_slot_with_hash PARAMS ((htab_t, const void *,
hashval_t, int));
extern void **htab_find_slot PARAMS ((htab_t, const void *,
enum insert_option));
extern void *htab_find_with_hash PARAMS ((htab_t, const void *,
hashval_t));
extern void **htab_find_slot_with_hash PARAMS ((htab_t, const void *,
hashval_t,
enum insert_option));
extern void htab_clear_slot PARAMS ((htab_t, void **));
extern void htab_remove_elt PARAMS ((htab_t, void *));

View File

@ -1,3 +1,9 @@
Tue Apr 18 16:23:31 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* hashtab.c: Various minor cleanups.
(htab_find_slot_with_hash): INSERT is now enum insert_option.
(htab_find_slot): Likewise.
2000-04-16 Dave Pitts <dpitts@cozx.com>
* cplus-dem.c (cplus_demangle_opname): Changed to use islower.

View File

@ -58,7 +58,7 @@ Boston, MA 02111-1307, USA. */
static unsigned long higher_prime_number PARAMS ((unsigned long));
/* The following function returns the nearest prime number which is
greater than a given source number. */
greater than a given source number, N. */
static unsigned long
higher_prime_number (n)
@ -66,20 +66,24 @@ higher_prime_number (n)
{
unsigned long i;
n |= 0x01; /* Force N to be odd. */
/* Ensure we have a larger number and then force to odd. */
n++;
n |= 0x01;
/* All odd numbers < 9 are prime. */
if (n < 9)
return n; /* All odd numbers < 9 are prime. */
return n;
/* Otherwise find the next prime using a sieve. */
next:
n += 2;
i = 3;
do
{
if (n % i == 0)
goto next;
i += 2;
}
while ((i * i) <= n);
for (i = 3; i * i <= n; i += 2)
if (n % i == 0)
{
n += 2;
goto next;
}
return n;
}
@ -116,13 +120,12 @@ htab_delete (htab)
htab_t htab;
{
int i;
if (htab->del_f)
for (i = htab->size - 1; i >= 0; i--)
{
if (htab->entries[i] != EMPTY_ENTRY
&& htab->entries[i] != DELETED_ENTRY)
(*htab->del_f) (htab->entries[i]);
}
if (htab->entries[i] != EMPTY_ENTRY
&& htab->entries[i] != DELETED_ENTRY)
(*htab->del_f) (htab->entries[i]);
free (htab->entries);
free (htab);
@ -135,13 +138,12 @@ htab_empty (htab)
htab_t htab;
{
int i;
if (htab->del_f)
for (i = htab->size - 1; i >= 0; i--)
{
if (htab->entries[i] != EMPTY_ENTRY
&& htab->entries[i] != DELETED_ENTRY)
(*htab->del_f) (htab->entries[i]);
}
if (htab->entries[i] != EMPTY_ENTRY
&& htab->entries[i] != DELETED_ENTRY)
(*htab->del_f) (htab->entries[i]);
memset (htab->entries, 0, htab->size * sizeof (void *));
}
@ -152,6 +154,7 @@ htab_empty (htab)
hash table.
This function also assumes there are no deleted entries in the table.
HASH is the hash value for the element to be inserted. */
static void **
find_empty_slot_for_expand (htab, hash)
htab_t htab;
@ -164,10 +167,10 @@ find_empty_slot_for_expand (htab, hash)
for (;;)
{
void **slot = htab->entries + index;
if (*slot == EMPTY_ENTRY)
return slot;
if (*slot == DELETED_ENTRY)
else if (*slot == DELETED_ENTRY)
abort ();
index += hash2;
@ -203,14 +206,18 @@ htab_expand (htab)
do
{
void *x = *p;
if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
{
void **q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
*q = x;
}
p++;
}
while (p < olimit);
free (oentries);
}
@ -255,6 +262,7 @@ htab_find_with_hash (htab, element, hash)
/* Like htab_find_slot_with_hash, but compute the hash value from the
element. */
void *
htab_find (htab, element)
htab_t htab;
@ -274,14 +282,14 @@ htab_find_slot_with_hash (htab, element, hash, insert)
htab_t htab;
const void *element;
hashval_t hash;
int insert;
enum insert_option insert;
{
void **first_deleted_slot;
unsigned int index;
hashval_t hash2;
size_t size;
if (insert && htab->size * 3 <= htab->n_elements * 4)
if (insert == INSERT && htab->size * 3 <= htab->n_elements * 4)
htab_expand (htab);
size = htab->size;
@ -296,7 +304,7 @@ htab_find_slot_with_hash (htab, element, hash, insert)
void *entry = htab->entries[index];
if (entry == EMPTY_ENTRY)
{
if (!insert)
if (insert == NO_INSERT)
return NULL;
htab->n_elements++;
@ -315,11 +323,8 @@ htab_find_slot_with_hash (htab, element, hash, insert)
if (!first_deleted_slot)
first_deleted_slot = &htab->entries[index];
}
else
{
if ((*htab->eq_f) (entry, element))
return &htab->entries[index];
}
else if ((*htab->eq_f) (entry, element))
return &htab->entries[index];
htab->collisions++;
index += hash2;
@ -330,11 +335,12 @@ htab_find_slot_with_hash (htab, element, hash, insert)
/* Like htab_find_slot_with_hash, but compute the hash value from the
element. */
void **
htab_find_slot (htab, element, insert)
htab_t htab;
const void *element;
int insert;
enum insert_option insert;
{
return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
insert);
@ -351,7 +357,7 @@ htab_remove_elt (htab, element)
{
void **slot;
slot = htab_find_slot (htab, element, 0);
slot = htab_find_slot (htab, element, NO_INSERT);
if (*slot == EMPTY_ENTRY)
return;
@ -374,8 +380,10 @@ htab_clear_slot (htab, slot)
if (slot < htab->entries || slot >= htab->entries + htab->size
|| *slot == EMPTY_ENTRY || *slot == DELETED_ENTRY)
abort ();
if (htab->del_f)
(*htab->del_f) (*slot);
*slot = DELETED_ENTRY;
htab->n_deleted++;
}
@ -391,12 +399,13 @@ htab_traverse (htab, callback, info)
htab_trav callback;
void *info;
{
void **slot, **limit;
slot = htab->entries;
limit = slot + htab->size;
void **slot = htab->entries;
void **limit = slot + htab->size;
do
{
void *x = *slot;
if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
if (!(*callback) (slot, info))
break;
@ -404,7 +413,7 @@ htab_traverse (htab, callback, info)
while (++slot < limit);
}
/* The following function returns current size of given hash table. */
/* Return the current size of given hash table. */
size_t
htab_size (htab)
@ -413,8 +422,7 @@ htab_size (htab)
return htab->size;
}
/* The following function returns current number of elements in given
hash table. */
/* Return the current number of elements in given hash table. */
size_t
htab_elements (htab)
@ -423,17 +431,15 @@ htab_elements (htab)
return htab->n_elements - htab->n_deleted;
}
/* The following function returns number of percents of fixed
collisions during all work with given hash table. */
/* Return the fraction of fixed collisions during all work with given
hash table. */
double
htab_collisions (htab)
htab_t htab;
{
int searches;
searches = htab->searches;
if (searches == 0)
if (htab->searches == 0)
return 0.0;
return (double)htab->collisions / (double)searches;
return (double) htab->collisions / (double) htab->searches;
}