OSDN Git Service

2009-01-03 Paul Thomas <pault@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / ipa-utils.c
index 729a84d..95e1856 100644 (file)
@@ -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)
     {