ipa-utils.c (searchc_env): New field allow_overwritable.
authorMartin Jambor <mjambor@suse.cz>
Wed, 1 Jun 2011 12:52:08 +0000 (14:52 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Wed, 1 Jun 2011 12:52:08 +0000 (14:52 +0200)
2011-06-01  Martin Jambor  <mjambor@suse.cz>

* ipa-utils.c (searchc_env): New field allow_overwritable.
(searchc): do not ignore edges to overwritable nodes if indicated
by env->allow_overwritable.
(ipa_reduced_postorder): Set env.allow_overwritable.

From-SVN: r174523

gcc/ChangeLog
gcc/ipa-utils.c

index 8bac87586d010a4967b97f8c9272985168c42878..add1fa2665495ae54b065ea6c0b1aa31f129c9cd 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-01  Martin Jambor  <mjambor@suse.cz>
+
+       * ipa-utils.c (searchc_env): New field allow_overwritable.
+       (searchc): do not ignore edges to overwritable nodes if indicated
+       by env->allow_overwritable.
+       (ipa_reduced_postorder): Set env.allow_overwritable.
+
 2011-06-01  Richard Guenther  <rguenther@suse.de>
 
        * tree.c (free_lang_data): Do not reset boolean_type_node nor
index de4f4b6e107b033d14a18dfe10123d23fd5fa9ea..f60ce2fd0741b33a8c68d6ab42804cfeec953389 100644 (file)
@@ -67,6 +67,7 @@ struct searchc_env {
   int order_pos;
   splay_tree nodes_marked_new;
   bool reduce;
+  bool allow_overwritable;
   int count;
 };
 
@@ -101,11 +102,14 @@ searchc (struct searchc_env* env, struct cgraph_node *v,
     {
       struct ipa_dfs_info * w_info;
       struct cgraph_node *w = edge->callee;
+      enum availability avail = cgraph_function_body_availability (w);
 
       if (ignore_edge && ignore_edge (edge))
         continue;
 
-      if (w->aux && cgraph_function_body_availability (edge->callee) > AVAIL_OVERWRITABLE)
+      if (w->aux
+         && (avail > AVAIL_OVERWRITABLE
+             || (env->allow_overwritable && avail == AVAIL_OVERWRITABLE)))
        {
          w_info = (struct ipa_dfs_info *) w->aux;
          if (w_info->new_node)
@@ -171,6 +175,7 @@ ipa_reduced_postorder (struct cgraph_node **order,
   env.nodes_marked_new = splay_tree_new (splay_tree_compare_ints, 0, 0);
   env.count = 1;
   env.reduce = reduce;
+  env.allow_overwritable = allow_overwritable;
 
   for (node = cgraph_nodes; node; node = node->next)
     {