tree.h (TYPE_HASH): Use TYPE_UID.
* tree.h (TYPE_HASH): Use TYPE_UID. (TREE_HASH): New macro with old definition of TYPE_HASH. * tree.c (build_type_attribute_variant): Use iterative_hash_object. (build_array_type, build_function_type): Likewise. (build_method_type_directly): Likewise. (build_offset_type, build_complex_type): Likewise. (type_hash_list, attribute_hash_list): Likewise. Now static. * except.c: s/TYPE_HASH/TREE_HASH/. * cp/tree.c (list_hash_pieces): s/TYPE_HASH/TREE_HASH/. From-SVN: r78993
This commit is contained in:
parent
822e895caf
commit
fd917e0dc4
|
@ -1,3 +1,14 @@
|
||||||
|
2004-03-05 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
* tree.h (TYPE_HASH): Use TYPE_UID.
|
||||||
|
(TREE_HASH): New macro with old definition of TYPE_HASH.
|
||||||
|
* tree.c (build_type_attribute_variant): Use iterative_hash_object.
|
||||||
|
(build_array_type, build_function_type): Likewise.
|
||||||
|
(build_method_type_directly): Likewise.
|
||||||
|
(build_offset_type, build_complex_type): Likewise.
|
||||||
|
(type_hash_list, attribute_hash_list): Likewise. Now static.
|
||||||
|
* except.c: s/TYPE_HASH/TREE_HASH/.
|
||||||
|
|
||||||
2004-03-05 Bob Wilson <bob.wilson@acm.org>
|
2004-03-05 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
* config/xtensa/xtensa.c (function_arg): Handle 16-byte aligned args.
|
* config/xtensa/xtensa.c (function_arg): Handle 16-byte aligned args.
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2004-03-05 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
* tree.c (list_hash_pieces): s/TYPE_HASH/TREE_HASH/.
|
||||||
|
|
||||||
2004-03-04 Geoffrey Keating <geoffk@apple.com>
|
2004-03-04 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* decl.c (grokfndecl): Update old incorrect comment.
|
* decl.c (grokfndecl): Update old incorrect comment.
|
||||||
|
|
|
@ -692,14 +692,14 @@ list_hash_pieces (tree purpose, tree value, tree chain)
|
||||||
hashval_t hashcode = 0;
|
hashval_t hashcode = 0;
|
||||||
|
|
||||||
if (chain)
|
if (chain)
|
||||||
hashcode += TYPE_HASH (chain);
|
hashcode += TREE_HASH (chain);
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
hashcode += TYPE_HASH (value);
|
hashcode += TREE_HASH (value);
|
||||||
else
|
else
|
||||||
hashcode += 1007;
|
hashcode += 1007;
|
||||||
if (purpose)
|
if (purpose)
|
||||||
hashcode += TYPE_HASH (purpose);
|
hashcode += TREE_HASH (purpose);
|
||||||
else
|
else
|
||||||
hashcode += 1009;
|
hashcode += 1009;
|
||||||
return hashcode;
|
return hashcode;
|
||||||
|
|
16
gcc/except.c
16
gcc/except.c
|
@ -1411,7 +1411,7 @@ static hashval_t
|
||||||
t2r_hash (const void *pentry)
|
t2r_hash (const void *pentry)
|
||||||
{
|
{
|
||||||
tree entry = (tree) pentry;
|
tree entry = (tree) pentry;
|
||||||
return TYPE_HASH (TREE_PURPOSE (entry));
|
return TREE_HASH (TREE_PURPOSE (entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1420,7 +1420,7 @@ add_type_for_runtime (tree type)
|
||||||
tree *slot;
|
tree *slot;
|
||||||
|
|
||||||
slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type,
|
slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type,
|
||||||
TYPE_HASH (type), INSERT);
|
TREE_HASH (type), INSERT);
|
||||||
if (*slot == NULL)
|
if (*slot == NULL)
|
||||||
{
|
{
|
||||||
tree runtime = (*lang_eh_runtime_type) (type);
|
tree runtime = (*lang_eh_runtime_type) (type);
|
||||||
|
@ -1434,7 +1434,7 @@ lookup_type_for_runtime (tree type)
|
||||||
tree *slot;
|
tree *slot;
|
||||||
|
|
||||||
slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type,
|
slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type,
|
||||||
TYPE_HASH (type), NO_INSERT);
|
TREE_HASH (type), NO_INSERT);
|
||||||
|
|
||||||
/* We should have always inserted the data earlier. */
|
/* We should have always inserted the data earlier. */
|
||||||
return TREE_VALUE (*slot);
|
return TREE_VALUE (*slot);
|
||||||
|
@ -1465,7 +1465,7 @@ static hashval_t
|
||||||
ttypes_filter_hash (const void *pentry)
|
ttypes_filter_hash (const void *pentry)
|
||||||
{
|
{
|
||||||
const struct ttypes_filter *entry = (const struct ttypes_filter *) pentry;
|
const struct ttypes_filter *entry = (const struct ttypes_filter *) pentry;
|
||||||
return TYPE_HASH (entry->t);
|
return TREE_HASH (entry->t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compare ENTRY with DATA (both struct ttypes_filter) for a @TTypes
|
/* Compare ENTRY with DATA (both struct ttypes_filter) for a @TTypes
|
||||||
|
@ -1492,12 +1492,12 @@ ehspec_filter_hash (const void *pentry)
|
||||||
tree list;
|
tree list;
|
||||||
|
|
||||||
for (list = entry->t; list ; list = TREE_CHAIN (list))
|
for (list = entry->t; list ; list = TREE_CHAIN (list))
|
||||||
h = (h << 5) + (h >> 27) + TYPE_HASH (TREE_VALUE (list));
|
h = (h << 5) + (h >> 27) + TREE_HASH (TREE_VALUE (list));
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add TYPE to cfun->eh->ttype_data, using TYPES_HASH to speed
|
/* Add TYPE (which may be NULL) to cfun->eh->ttype_data, using TYPES_HASH
|
||||||
up the search. Return the filter value to be used. */
|
to speed up the search. Return the filter value to be used. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
add_ttypes_entry (htab_t ttypes_hash, tree type)
|
add_ttypes_entry (htab_t ttypes_hash, tree type)
|
||||||
|
@ -1505,7 +1505,7 @@ add_ttypes_entry (htab_t ttypes_hash, tree type)
|
||||||
struct ttypes_filter **slot, *n;
|
struct ttypes_filter **slot, *n;
|
||||||
|
|
||||||
slot = (struct ttypes_filter **)
|
slot = (struct ttypes_filter **)
|
||||||
htab_find_slot_with_hash (ttypes_hash, type, TYPE_HASH (type), INSERT);
|
htab_find_slot_with_hash (ttypes_hash, type, TREE_HASH (type), INSERT);
|
||||||
|
|
||||||
if ((n = *slot) == NULL)
|
if ((n = *slot) == NULL)
|
||||||
{
|
{
|
||||||
|
|
75
gcc/tree.c
75
gcc/tree.c
|
@ -107,6 +107,8 @@ static hashval_t type_hash_hash (const void *);
|
||||||
static void print_type_hash_statistics (void);
|
static void print_type_hash_statistics (void);
|
||||||
static void finish_vector_type (tree);
|
static void finish_vector_type (tree);
|
||||||
static int type_hash_marked_p (const void *);
|
static int type_hash_marked_p (const void *);
|
||||||
|
static unsigned int type_hash_list (tree, hashval_t);
|
||||||
|
static unsigned int attribute_hash_list (tree, hashval_t);
|
||||||
|
|
||||||
tree global_trees[TI_MAX];
|
tree global_trees[TI_MAX];
|
||||||
tree integer_types[itk_none];
|
tree integer_types[itk_none];
|
||||||
|
@ -2723,8 +2725,9 @@ build_type_attribute_variant (tree ttype, tree attribute)
|
||||||
{
|
{
|
||||||
if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
|
if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
|
||||||
{
|
{
|
||||||
unsigned int hashcode;
|
hashval_t hashcode = 0;
|
||||||
tree ntype;
|
tree ntype;
|
||||||
|
enum tree_code code = TREE_CODE (ttype);
|
||||||
|
|
||||||
ntype = copy_node (ttype);
|
ntype = copy_node (ttype);
|
||||||
|
|
||||||
|
@ -2737,23 +2740,32 @@ build_type_attribute_variant (tree ttype, tree attribute)
|
||||||
TYPE_NEXT_VARIANT (ntype) = 0;
|
TYPE_NEXT_VARIANT (ntype) = 0;
|
||||||
set_type_quals (ntype, TYPE_UNQUALIFIED);
|
set_type_quals (ntype, TYPE_UNQUALIFIED);
|
||||||
|
|
||||||
hashcode = (TYPE_HASH (TREE_CODE (ntype))
|
hashcode = iterative_hash_object (code, hashcode);
|
||||||
+ TYPE_HASH (TREE_TYPE (ntype))
|
if (TREE_TYPE (ntype))
|
||||||
+ attribute_hash_list (attribute));
|
hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
|
||||||
|
hashcode);
|
||||||
|
hashcode = attribute_hash_list (attribute, hashcode);
|
||||||
|
|
||||||
switch (TREE_CODE (ntype))
|
switch (TREE_CODE (ntype))
|
||||||
{
|
{
|
||||||
case FUNCTION_TYPE:
|
case FUNCTION_TYPE:
|
||||||
hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
|
hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
|
||||||
break;
|
break;
|
||||||
case ARRAY_TYPE:
|
case ARRAY_TYPE:
|
||||||
hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
|
hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
|
||||||
|
hashcode);
|
||||||
break;
|
break;
|
||||||
case INTEGER_TYPE:
|
case INTEGER_TYPE:
|
||||||
hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
|
hashcode = iterative_hash_object
|
||||||
|
(TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
|
||||||
|
hashcode = iterative_hash_object
|
||||||
|
(TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
|
||||||
break;
|
break;
|
||||||
case REAL_TYPE:
|
case REAL_TYPE:
|
||||||
hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
|
{
|
||||||
|
unsigned int precision = TYPE_PRECISION (ntype);
|
||||||
|
hashcode = iterative_hash_object (precision, hashcode);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -3054,13 +3066,14 @@ build_type_copy (tree type)
|
||||||
of the individual types. */
|
of the individual types. */
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
type_hash_list (tree list)
|
type_hash_list (tree list, hashval_t hashcode)
|
||||||
{
|
{
|
||||||
unsigned int hashcode;
|
|
||||||
tree tail;
|
tree tail;
|
||||||
|
|
||||||
for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
|
for (tail = list; tail; tail = TREE_CHAIN (tail))
|
||||||
hashcode += TYPE_HASH (TREE_VALUE (tail));
|
if (TREE_VALUE (tail) != error_mark_node)
|
||||||
|
hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
|
||||||
|
hashcode);
|
||||||
|
|
||||||
return hashcode;
|
return hashcode;
|
||||||
}
|
}
|
||||||
|
@ -3109,7 +3122,7 @@ type_hash_hash (const void *item)
|
||||||
If one is found, return it. Otherwise return 0. */
|
If one is found, return it. Otherwise return 0. */
|
||||||
|
|
||||||
tree
|
tree
|
||||||
type_hash_lookup (unsigned int hashcode, tree type)
|
type_hash_lookup (hashval_t hashcode, tree type)
|
||||||
{
|
{
|
||||||
struct type_hash *h, in;
|
struct type_hash *h, in;
|
||||||
|
|
||||||
|
@ -3130,7 +3143,7 @@ type_hash_lookup (unsigned int hashcode, tree type)
|
||||||
for a type TYPE whose hash code is HASHCODE. */
|
for a type TYPE whose hash code is HASHCODE. */
|
||||||
|
|
||||||
void
|
void
|
||||||
type_hash_add (unsigned int hashcode, tree type)
|
type_hash_add (hashval_t hashcode, tree type)
|
||||||
{
|
{
|
||||||
struct type_hash *h;
|
struct type_hash *h;
|
||||||
void **loc;
|
void **loc;
|
||||||
|
@ -3210,14 +3223,14 @@ print_type_hash_statistics (void)
|
||||||
by adding the hash codes of the individual attributes. */
|
by adding the hash codes of the individual attributes. */
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
attribute_hash_list (tree list)
|
attribute_hash_list (tree list, hashval_t hashcode)
|
||||||
{
|
{
|
||||||
unsigned int hashcode;
|
|
||||||
tree tail;
|
tree tail;
|
||||||
|
|
||||||
for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
|
for (tail = list; tail; tail = TREE_CHAIN (tail))
|
||||||
/* ??? Do we want to add in TREE_VALUE too? */
|
/* ??? Do we want to add in TREE_VALUE too? */
|
||||||
hashcode += TYPE_HASH (TREE_PURPOSE (tail));
|
hashcode = iterative_hash_object
|
||||||
|
(IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
|
||||||
return hashcode;
|
return hashcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3943,7 +3956,7 @@ tree
|
||||||
build_array_type (tree elt_type, tree index_type)
|
build_array_type (tree elt_type, tree index_type)
|
||||||
{
|
{
|
||||||
tree t;
|
tree t;
|
||||||
unsigned int hashcode;
|
hashval_t hashcode = 0;
|
||||||
|
|
||||||
if (TREE_CODE (elt_type) == FUNCTION_TYPE)
|
if (TREE_CODE (elt_type) == FUNCTION_TYPE)
|
||||||
{
|
{
|
||||||
|
@ -3965,7 +3978,8 @@ build_array_type (tree elt_type, tree index_type)
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
|
hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
|
||||||
|
hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
|
||||||
t = type_hash_canon (hashcode, t);
|
t = type_hash_canon (hashcode, t);
|
||||||
|
|
||||||
if (!COMPLETE_TYPE_P (t))
|
if (!COMPLETE_TYPE_P (t))
|
||||||
|
@ -3998,7 +4012,7 @@ tree
|
||||||
build_function_type (tree value_type, tree arg_types)
|
build_function_type (tree value_type, tree arg_types)
|
||||||
{
|
{
|
||||||
tree t;
|
tree t;
|
||||||
unsigned int hashcode;
|
hashval_t hashcode = 0;
|
||||||
|
|
||||||
if (TREE_CODE (value_type) == FUNCTION_TYPE)
|
if (TREE_CODE (value_type) == FUNCTION_TYPE)
|
||||||
{
|
{
|
||||||
|
@ -4012,7 +4026,8 @@ build_function_type (tree value_type, tree arg_types)
|
||||||
TYPE_ARG_TYPES (t) = arg_types;
|
TYPE_ARG_TYPES (t) = arg_types;
|
||||||
|
|
||||||
/* If we already have such a type, use the old one and free this one. */
|
/* If we already have such a type, use the old one and free this one. */
|
||||||
hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
|
hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
|
||||||
|
hashcode = type_hash_list (arg_types, hashcode);
|
||||||
t = type_hash_canon (hashcode, t);
|
t = type_hash_canon (hashcode, t);
|
||||||
|
|
||||||
if (!COMPLETE_TYPE_P (t))
|
if (!COMPLETE_TYPE_P (t))
|
||||||
|
@ -4058,7 +4073,7 @@ build_method_type_directly (tree basetype,
|
||||||
{
|
{
|
||||||
tree t;
|
tree t;
|
||||||
tree ptype;
|
tree ptype;
|
||||||
int hashcode;
|
int hashcode = 0;
|
||||||
|
|
||||||
/* Make a node of the sort we want. */
|
/* Make a node of the sort we want. */
|
||||||
t = make_node (METHOD_TYPE);
|
t = make_node (METHOD_TYPE);
|
||||||
|
@ -4074,8 +4089,9 @@ build_method_type_directly (tree basetype,
|
||||||
|
|
||||||
/* If we already have such a type, use the old one and free this one.
|
/* If we already have such a type, use the old one and free this one.
|
||||||
Note that it also frees up the above cons cell if found. */
|
Note that it also frees up the above cons cell if found. */
|
||||||
hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) +
|
hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
|
||||||
type_hash_list (argtypes);
|
hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
|
||||||
|
hashcode = type_hash_list (argtypes, hashcode);
|
||||||
|
|
||||||
t = type_hash_canon (hashcode, t);
|
t = type_hash_canon (hashcode, t);
|
||||||
|
|
||||||
|
@ -4109,7 +4125,7 @@ tree
|
||||||
build_offset_type (tree basetype, tree type)
|
build_offset_type (tree basetype, tree type)
|
||||||
{
|
{
|
||||||
tree t;
|
tree t;
|
||||||
unsigned int hashcode;
|
hashval_t hashcode = 0;
|
||||||
|
|
||||||
/* Make a node of the sort we want. */
|
/* Make a node of the sort we want. */
|
||||||
t = make_node (OFFSET_TYPE);
|
t = make_node (OFFSET_TYPE);
|
||||||
|
@ -4118,7 +4134,8 @@ build_offset_type (tree basetype, tree type)
|
||||||
TREE_TYPE (t) = type;
|
TREE_TYPE (t) = type;
|
||||||
|
|
||||||
/* If we already have such a type, use the old one and free this one. */
|
/* If we already have such a type, use the old one and free this one. */
|
||||||
hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
|
hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
|
||||||
|
hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
|
||||||
t = type_hash_canon (hashcode, t);
|
t = type_hash_canon (hashcode, t);
|
||||||
|
|
||||||
if (!COMPLETE_TYPE_P (t))
|
if (!COMPLETE_TYPE_P (t))
|
||||||
|
@ -4133,7 +4150,7 @@ tree
|
||||||
build_complex_type (tree component_type)
|
build_complex_type (tree component_type)
|
||||||
{
|
{
|
||||||
tree t;
|
tree t;
|
||||||
unsigned int hashcode;
|
hashval_t hashcode;
|
||||||
|
|
||||||
/* Make a node of the sort we want. */
|
/* Make a node of the sort we want. */
|
||||||
t = make_node (COMPLEX_TYPE);
|
t = make_node (COMPLEX_TYPE);
|
||||||
|
@ -4142,7 +4159,7 @@ build_complex_type (tree component_type)
|
||||||
set_type_quals (t, TYPE_QUALS (component_type));
|
set_type_quals (t, TYPE_QUALS (component_type));
|
||||||
|
|
||||||
/* If we already have such a type, use the old one and free this one. */
|
/* If we already have such a type, use the old one and free this one. */
|
||||||
hashcode = TYPE_HASH (component_type);
|
hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
|
||||||
t = type_hash_canon (hashcode, t);
|
t = type_hash_canon (hashcode, t);
|
||||||
|
|
||||||
if (!COMPLETE_TYPE_P (t))
|
if (!COMPLETE_TYPE_P (t))
|
||||||
|
|
|
@ -387,7 +387,11 @@ extern void tree_operand_check_failed (int, enum tree_code,
|
||||||
|
|
||||||
/* Here is how primitive or already-canonicalized types' hash codes
|
/* Here is how primitive or already-canonicalized types' hash codes
|
||||||
are made. */
|
are made. */
|
||||||
#define TYPE_HASH(TYPE) ((size_t) (TYPE) & 0777777)
|
#define TYPE_HASH(TYPE) (TYPE_UID (TYPE))
|
||||||
|
|
||||||
|
/* A simple hash function for an arbitrary tree node. This must not be
|
||||||
|
used in hash tables which are saved to a PCH. */
|
||||||
|
#define TREE_HASH(NODE) ((size_t) (NODE) & 0777777)
|
||||||
|
|
||||||
/* Nodes are chained together for many purposes.
|
/* Nodes are chained together for many purposes.
|
||||||
Types are chained together to record them for being output to the debugger
|
Types are chained together to record them for being output to the debugger
|
||||||
|
@ -2179,7 +2183,7 @@ extern tree array_type_nelts (tree);
|
||||||
extern tree value_member (tree, tree);
|
extern tree value_member (tree, tree);
|
||||||
extern tree purpose_member (tree, tree);
|
extern tree purpose_member (tree, tree);
|
||||||
extern tree binfo_member (tree, tree);
|
extern tree binfo_member (tree, tree);
|
||||||
extern unsigned int attribute_hash_list (tree);
|
|
||||||
extern int attribute_list_equal (tree, tree);
|
extern int attribute_list_equal (tree, tree);
|
||||||
extern int attribute_list_contained (tree, tree);
|
extern int attribute_list_contained (tree, tree);
|
||||||
extern int tree_int_cst_equal (tree, tree);
|
extern int tree_int_cst_equal (tree, tree);
|
||||||
|
@ -2881,7 +2885,6 @@ extern int type_list_equal (tree, tree);
|
||||||
extern int chain_member (tree, tree);
|
extern int chain_member (tree, tree);
|
||||||
extern tree type_hash_lookup (unsigned int, tree);
|
extern tree type_hash_lookup (unsigned int, tree);
|
||||||
extern void type_hash_add (unsigned int, tree);
|
extern void type_hash_add (unsigned int, tree);
|
||||||
extern unsigned int type_hash_list (tree);
|
|
||||||
extern int simple_cst_list_equal (tree, tree);
|
extern int simple_cst_list_equal (tree, tree);
|
||||||
extern void dump_tree_statistics (void);
|
extern void dump_tree_statistics (void);
|
||||||
extern void expand_function_end (void);
|
extern void expand_function_end (void);
|
||||||
|
|
Loading…
Reference in New Issue