OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / ipa-utils.c
index 3b5d128..0b7ec66 100644 (file)
@@ -28,10 +28,10 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "langhooks.h"
 #include "pointer-set.h"
+#include "splay-tree.h"
 #include "ggc.h"
 #include "ipa-utils.h"
 #include "ipa-reference.h"
-#include "c-common.h"
 #include "gimple.h"
 #include "cgraph.h"
 #include "output.h"
@@ -81,7 +81,8 @@ struct searchc_env {
    searching from.  */
 
 static void
-searchc (struct searchc_env* env, struct cgraph_node *v) 
+searchc (struct searchc_env* env, struct cgraph_node *v,
+        bool (*ignore_edge) (struct cgraph_edge *))
 {
   struct cgraph_edge *edge;
   struct ipa_dfs_info *v_info = (struct ipa_dfs_info *) v->aux;
@@ -101,12 +102,15 @@ searchc (struct searchc_env* env, struct cgraph_node *v)
       struct ipa_dfs_info * w_info;
       struct cgraph_node *w = edge->callee;
 
+      if (ignore_edge && ignore_edge (edge))
+        continue;
+
       if (w->aux && cgraph_function_body_availability (edge->callee) > AVAIL_OVERWRITABLE)
        {
          w_info = (struct ipa_dfs_info *) w->aux;
          if (w_info->new_node) 
            {
-             searchc (env, w);
+             searchc (env, w, ignore_edge);
              v_info->low_link =
                (v_info->low_link < w_info->low_link) ?
                v_info->low_link : w_info->low_link;
@@ -152,7 +156,8 @@ searchc (struct searchc_env* env, struct cgraph_node *v)
 
 int
 ipa_utils_reduced_inorder (struct cgraph_node **order, 
-                          bool reduce, bool allow_overwritable)
+                          bool reduce, bool allow_overwritable,
+                          bool (*ignore_edge) (struct cgraph_edge *))
 {
   struct cgraph_node *node;
   struct searchc_env env;
@@ -193,7 +198,7 @@ ipa_utils_reduced_inorder (struct cgraph_node **order,
   while (result)
     {
       node = (struct cgraph_node *)result->value;
-      searchc (&env, node);
+      searchc (&env, node, ignore_edge);
       result = splay_tree_min (env.nodes_marked_new);
     }
   splay_tree_delete (env.nodes_marked_new);
@@ -210,14 +215,12 @@ ipa_utils_reduced_inorder (struct cgraph_node **order,
 tree
 get_base_var (tree t)
 {
-  if ((TREE_CODE (t) == EXC_PTR_EXPR) || (TREE_CODE (t) == FILTER_EXPR))
-    return t;
-
   while (!SSA_VAR_P (t) 
         && (!CONSTANT_CLASS_P (t))
         && TREE_CODE (t) != LABEL_DECL
         && TREE_CODE (t) != FUNCTION_DECL
-        && TREE_CODE (t) != CONST_DECL)
+        && TREE_CODE (t) != CONST_DECL
+        && TREE_CODE (t) != CONSTRUCTOR)
     {
       t = TREE_OPERAND (t, 0);
     }