diff options
author | Jan Hubicka <jh@suse.cz> | 2005-03-20 16:27:18 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2005-03-20 15:27:18 +0000 |
commit | 1655dc9de3ca6e8ef09648bf8bc73600910643c5 (patch) | |
tree | 9295919722e5f5a302f8ec2e11579c6b99f514ae /gcc/cgraph.c | |
parent | f6d1c3a69b64edc2ff6d10d8ec89456552a5f3a8 (diff) | |
download | gcc-1655dc9de3ca6e8ef09648bf8bc73600910643c5.zip gcc-1655dc9de3ca6e8ef09648bf8bc73600910643c5.tar.gz gcc-1655dc9de3ca6e8ef09648bf8bc73600910643c5.tar.bz2 |
cgraph.h (cgraph_node): Add prev_clone pointer.
* 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.
From-SVN: r96761
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index c7475c1..3aabc40 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -422,7 +422,10 @@ cgraph_remove_node (struct cgraph_node *node) if (*slot == node) { if (node->next_clone) + { *slot = node->next_clone; + node->next_clone->prev_clone = NULL; + } else { htab_clear_slot (cgraph_hash, slot); @@ -431,11 +434,9 @@ cgraph_remove_node (struct cgraph_node *node) } 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 @@ -779,7 +780,10 @@ cgraph_clone_node (struct cgraph_node *n) 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; } |