summaryrefslogtreecommitdiff
path: root/gcc/ipa-utils.c
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2008-09-19 17:56:37 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2008-09-19 17:56:37 +0000
commitf81424362ed2c19415d5c09343737a8c799b47b7 (patch)
tree0d3a9e78065a6083c400be80b25fd4fd8e585a7f /gcc/ipa-utils.c
parent27fa90116c262fdd12ce9bcfd9eb7bd1c57b3180 (diff)
downloadgcc-f81424362ed2c19415d5c09343737a8c799b47b7.tar.gz
2008-09-18 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk r140490 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@140495 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-utils.c')
-rw-r--r--gcc/ipa-utils.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c
index 729a84d8710..95e1856ac5b 100644
--- a/gcc/ipa-utils.c
+++ b/gcc/ipa-utils.c
@@ -100,10 +100,8 @@ searchc (struct searchc_env* env, struct cgraph_node *v)
{
struct ipa_dfs_info * w_info;
struct cgraph_node *w = edge->callee;
- /* Bypass the clones and only look at the master node. Skip
- external and other bogus nodes. */
- w = cgraph_master_clone (w);
- if (w && w->aux)
+
+ if (w->aux && cgraph_function_body_availability (edge->callee) > AVAIL_OVERWRITABLE)
{
w_info = (struct ipa_dfs_info *) w->aux;
if (w_info->new_node)
@@ -168,27 +166,29 @@ ipa_utils_reduced_inorder (struct cgraph_node **order,
env.reduce = reduce;
for (node = cgraph_nodes; node; node = node->next)
- if ((node->analyzed)
- && (cgraph_is_master_clone (node)
- || (allow_overwritable
- && (cgraph_function_body_availability (node) ==
- AVAIL_OVERWRITABLE))))
- {
- /* Reuse the info if it is already there. */
- struct ipa_dfs_info *info = (struct ipa_dfs_info *) node->aux;
- if (!info)
- info = XCNEW (struct ipa_dfs_info);
- info->new_node = true;
- info->on_stack = false;
- info->next_cycle = NULL;
- node->aux = info;
-
- splay_tree_insert (env.nodes_marked_new,
- (splay_tree_key)node->uid,
- (splay_tree_value)node);
- }
- else
- node->aux = NULL;
+ {
+ enum availability avail = cgraph_function_body_availability (node);
+
+ if (avail > AVAIL_OVERWRITABLE
+ || (allow_overwritable
+ && (avail == AVAIL_OVERWRITABLE)))
+ {
+ /* Reuse the info if it is already there. */
+ struct ipa_dfs_info *info = (struct ipa_dfs_info *) node->aux;
+ if (!info)
+ info = XCNEW (struct ipa_dfs_info);
+ info->new_node = true;
+ info->on_stack = false;
+ info->next_cycle = NULL;
+ node->aux = info;
+
+ splay_tree_insert (env.nodes_marked_new,
+ (splay_tree_key)node->uid,
+ (splay_tree_value)node);
+ }
+ else
+ node->aux = NULL;
+ }
result = splay_tree_min (env.nodes_marked_new);
while (result)
{