[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
This commit is contained in:
Zack Weinberg 2004-05-22 18:16:39 +00:00
parent c1c52409c7
commit 6f312d18d4
6 changed files with 64 additions and 41 deletions

View file

@ -1,3 +1,32 @@
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.
2004-05-22 Joseph S. Myers <jsm@polyomino.org.uk>
* doc/contrib.texi: Add g77 contributors.

View file

@ -2582,8 +2582,10 @@ c_common_truthvalue_conversion (tree expr)
switch (TREE_CODE (expr))
{
case EQ_EXPR:
case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR:
case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
case ORDERED_EXPR: case UNORDERED_EXPR:
case TRUTH_ANDIF_EXPR:
case TRUTH_ORIF_EXPR:
case TRUTH_AND_EXPR:

View file

@ -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. */

View file

@ -151,8 +151,6 @@ extern FILE *cgraph_dump_file;
extern GTY(()) int cgraph_varpool_n_nodes;
extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes_queue;
extern GTY((param_is (union tree_node))) htab_t cgraph_inline_hash;
/* In cgraph.c */
void dump_cgraph (FILE *);

View file

@ -1071,14 +1071,7 @@ cgraph_mark_inline_edge (struct cgraph_edge *e)
e->inline_failed = NULL;
if (!e->callee->global.inlined && flag_unit_at_a_time)
{
void **slot;
if (!cgraph_inline_hash)
cgraph_inline_hash = htab_create_ggc (42, htab_hash_pointer,
htab_eq_pointer, NULL);
slot = htab_find_slot (cgraph_inline_hash, e->callee->decl, INSERT);
*slot = e->callee->decl;
}
DECL_POSSIBLY_INLINED (e->callee->decl) = true;
e->callee->global.inlined = true;
cgraph_clone_inlined_nodes (e, true);

View file

@ -2212,6 +2212,12 @@ struct tree_type GTY(())
#define DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL(DECL) \
DECL_CHECK (DECL)->decl.needs_to_live_in_memory
/* Nonzero for a decl that cgraph has decided should be inlined into
at least one call site. It is not meaningful to look at this
directly; always use cgraph_function_possibly_inlined_p. */
#define DECL_POSSIBLY_INLINED(DECL) \
FUNCTION_DECL_CHECK (DECL)->decl.possibly_inlined
/* Enumerate visibility settings. */
enum symbol_visibility
@ -2276,7 +2282,8 @@ struct tree_decl GTY(())
unsigned lang_flag_7 : 1;
unsigned needs_to_live_in_memory : 1;
/* 15 unused bits. */
unsigned possibly_inlined : 1;
/* 14 unused bits. */
union tree_decl_u1 {
/* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is