aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraph.c
diff options
context:
space:
mode:
authorZack Weinberg <zack@gcc.gnu.org>2004-05-22 18:16:39 +0000
committerZack Weinberg <zack@gcc.gnu.org>2004-05-22 18:16:39 +0000
commit6f312d18d4788838bbd51c409a29b11ad8ccf009 (patch)
tree409d944e4e6302902eb8e16c793a145c374d08c1 /gcc/cgraph.c
parentc1c52409c7f80e9656eb8a1a9e09f7f29f1c866a (diff)
downloadgcc-6f312d18d4788838bbd51c409a29b11ad8ccf009.zip
gcc-6f312d18d4788838bbd51c409a29b11ad8ccf009.tar.gz
gcc-6f312d18d4788838bbd51c409a29b11ad8ccf009.tar.bz2
[multiple changes]
2004-05-22 Andrew Pinski <pinskia@physics.uc.edu> * c-common.c (c_common_truthvalue_conversion): Handle UNEQ_EXPR, UNLE_EXPR, UNGE_EXPR, UNLT_EXPR, UNGT_EXPR, ORDERED_EXPR, and UNORDERED_EXPR as comparison operators, i.e. set the type to truthvalue_type_node and return. 2004-05-22 Zack Weinberg <zack@codesourcery.com> * tree.h (struct tree_decl): Add possibly_inlined bit. (DECL_POSSIBLY_INLINED): New accessor macro. * cgraph.h: Remove declaration of cgraph_inline_hash. * cgraph.c: Remove definition of cgraph_inline_hash. (hash_node): Revert to hashing DECL_UID. (eq_node): Take two pointers to cgraph_node structures. Compare DECL_UIDs. (cgraph_remove_node): Pass the node directly to htab_find_slot. (cgraph_varpool_hash_node): Rename hash_varpool_node; hash on DECL_UID. (eq_cgraph_varpool_node): Rename eq_varpool_node; take two pointers to cgraph_varpool_node structures; compare DECL_UIDs. (cgraph_node): Allocate a temporary node on the stack, fill in its DECL field, and pass that to htab_find_slot. (cgraph_varpool_node): Likewise. (cgraph_function_possibly_inlined_p): If global info is ready, return the DECL_POSSIBLY_INLINED bit. * cgraphunit.c (cgraph_mark_inline_edge): Set DECL_POSSIBLY_INLINED instead of mucking with cgraph_inline_hash. From-SVN: r82140
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r--gcc/cgraph.c50
1 files changed, 22 insertions, 28 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index a1f137a..37008e2 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -99,11 +99,6 @@ The varpool data structure:
/* Hash table used to convert declarations into nodes. */
static GTY((param_is (struct cgraph_node))) htab_t cgraph_hash;
-/* We destructively update the callgraph during inlining, thus we need to
- keep a separate table with information on whether inlining happened.
- ??? Do this with a bit in the DECL instead of a hash table. */
-htab_t cgraph_inline_hash;
-
/* The linked list of cgraph nodes. */
struct cgraph_node *cgraph_nodes;
@@ -139,7 +134,8 @@ static int eq_node (const void *, const void *);
static hashval_t
hash_node (const void *p)
{
- return htab_hash_pointer (((struct cgraph_node *) p)->decl);
+ const struct cgraph_node *n = p;
+ return (hashval_t) DECL_UID (n->decl);
}
/* Returns nonzero if P1 and P2 are equal. */
@@ -147,7 +143,8 @@ hash_node (const void *p)
static int
eq_node (const void *p1, const void *p2)
{
- return (void *)((struct cgraph_node *) p1)->decl == p2;
+ const struct cgraph_node *n1 = p1, *n2 = p2;
+ return DECL_UID (n1->decl) == DECL_UID (n2->decl);
}
/* Allocate new callgraph node and insert it into basic data structures. */
@@ -171,8 +168,7 @@ cgraph_create_node (void)
struct cgraph_node *
cgraph_node (tree decl)
{
- struct cgraph_node *node;
- struct cgraph_node **slot;
+ struct cgraph_node key, *node, **slot;
if (TREE_CODE (decl) != FUNCTION_DECL)
abort ();
@@ -180,9 +176,10 @@ cgraph_node (tree decl)
if (!cgraph_hash)
cgraph_hash = htab_create_ggc (10, hash_node, eq_node, NULL);
- slot = (struct cgraph_node **)
- htab_find_slot_with_hash (cgraph_hash, decl,
- htab_hash_pointer (decl), INSERT);
+ key.decl = decl;
+
+ slot = (struct cgraph_node **) htab_find_slot (cgraph_hash, &key, INSERT);
+
if (*slot)
return *slot;
@@ -323,9 +320,7 @@ cgraph_remove_node (struct cgraph_node *node)
cgraph_nodes = node->next;
if (node->next)
node->next->previous = node->previous;
- slot =
- htab_find_slot_with_hash (cgraph_hash, node->decl,
- htab_hash_pointer (node->decl), NO_INSERT);
+ slot = htab_find_slot (cgraph_hash, node, NO_INSERT);
if (*slot == node)
{
if (node->next_clone)
@@ -526,35 +521,36 @@ dump_cgraph (FILE *f)
/* Returns a hash code for P. */
static hashval_t
-cgraph_varpool_hash_node (const void *p)
+hash_varpool_node (const void *p)
{
- return htab_hash_pointer (((struct cgraph_varpool_node *) p)->decl);
+ const struct cgraph_varpool_node *n = p;
+ return (hashval_t) DECL_UID (n->decl);
}
/* Returns nonzero if P1 and P2 are equal. */
static int
-eq_cgraph_varpool_node (const void *p1, const void *p2)
+eq_varpool_node (const void *p1, const void *p2)
{
- return (void *)((struct cgraph_varpool_node *) p1)->decl == p2;
+ const struct cgraph_varpool_node *n1 = p1, *n2 = p2;
+ return DECL_UID (n1->decl) == DECL_UID (n2->decl);
}
/* Return cgraph_varpool node assigned to DECL. Create new one when needed. */
struct cgraph_varpool_node *
cgraph_varpool_node (tree decl)
{
- struct cgraph_varpool_node *node;
- struct cgraph_varpool_node **slot;
+ struct cgraph_varpool_node key, *node, **slot;
if (!DECL_P (decl) || TREE_CODE (decl) == FUNCTION_DECL)
abort ();
if (!cgraph_varpool_hash)
- cgraph_varpool_hash = htab_create_ggc (10, cgraph_varpool_hash_node,
- eq_cgraph_varpool_node, NULL);
+ cgraph_varpool_hash = htab_create_ggc (10, hash_varpool_node,
+ eq_varpool_node, NULL);
+ key.decl = decl;
slot = (struct cgraph_varpool_node **)
- htab_find_slot_with_hash (cgraph_varpool_hash, decl,
- htab_hash_pointer (decl), INSERT);
+ htab_find_slot (cgraph_varpool_hash, &key, INSERT);
if (*slot)
return *slot;
node = ggc_alloc_cleared (sizeof (*node));
@@ -657,9 +653,7 @@ cgraph_function_possibly_inlined_p (tree decl)
{
if (!cgraph_global_info_ready)
return (DECL_INLINE (decl) && !flag_really_no_inline);
- if (!cgraph_inline_hash)
- return false;
- return (htab_find_slot (cgraph_inline_hash, decl, NO_INSERT) != NULL);
+ return DECL_POSSIBLY_INLINED (decl);
}
/* Create clone of E in the node N represented by CALL_EXPR the callgraph. */