+2005-03-20 Jan Hubicka <jh@suse.cz>
+
+ * cgraph.h (cgraph_node): Add prev_clone pointer.
+ * cgraph.c (cgraph_remove_node): Remove from doubly linked chain.
+ (cgraph_clone_node): Produce doubly linked chain.
+
2005-03-20 Joseph S. Myers <joseph@codesourcery.com>
* c-common.c (handle_aligned_attribute, check_function_sentinel,
if (*slot == node)
{
if (node->next_clone)
+ {
*slot = node->next_clone;
+ node->next_clone->prev_clone = NULL;
+ }
else
{
htab_clear_slot (cgraph_hash, slot);
}
else
{
- struct cgraph_node *n;
-
- for (n = *slot; n->next_clone != node; n = n->next_clone)
- continue;
- n->next_clone = node->next_clone;
+ node->prev_clone->next_clone = node->next_clone;
+ if (node->next_clone)
+ node->next_clone->prev_clone = node->prev_clone;
}
/* While all the clones are removed after being proceeded, the function
cgraph_clone_edge (e, new, e->call_expr);
new->next_clone = n->next_clone;
+ new->prev_clone = n;
n->next_clone = new;
+ if (new->next_clone)
+ new->next_clone->prev_clone = new;
return new;
}
struct cgraph_node *next_needed;
/* Pointer to the next clone. */
struct cgraph_node *next_clone;
+ struct cgraph_node *prev_clone;
PTR GTY ((skip)) aux;
struct cgraph_local_info local;