OSDN Git Service

PR tree-optimize/51680
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Jan 2012 16:39:00 +0000 (16:39 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Jan 2012 16:39:00 +0000 (16:39 +0000)
* ipa-inline-analyss.c (evaluate_properties_for_edge): Fix conditoin on when
known_vals needs to be computed; cleanup.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182995 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa-inline-analysis.c

index a2648d8..01e160c 100644 (file)
@@ -1,5 +1,11 @@
 2012-01-08  Jan Hubicka  <jh@suse.cz>
 
+       PR tree-optimize/51680
+       * ipa-inline-analyss.c (evaluate_properties_for_edge): Fix conditoin on when
+       known_vals needs to be computed; cleanup.
+
+2012-01-08  Jan Hubicka  <jh@suse.cz>
+
        PR tree-optimize/51694
        * ipa-cp.c (ipa_get_indirect_edge_target): Add bounds checks.
 
index 5778e68..4026f4e 100644 (file)
@@ -718,7 +718,7 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p,
 {
   struct cgraph_node *callee = cgraph_function_or_thunk_node (e->callee, NULL);
   struct inline_summary *info = inline_summary (callee);
-  int i;
+  VEC (tree, heap) *known_vals = NULL;
 
   if (clause_ptr)
     *clause_ptr = inline_p ? 0 : 1 << predicate_not_inlined_condition;
@@ -728,13 +728,13 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p,
     *known_binfos_ptr = NULL;
 
   if (ipa_node_params_vector
+      && !e->call_stmt_cannot_inline_p
       && ((clause_ptr && info->conds) || known_vals_ptr || known_binfos_ptr))
     {
       struct ipa_node_params *parms_info;
       struct ipa_edge_args *args = IPA_EDGE_REF (e);
       struct inline_edge_summary *es = inline_edge_summary (e);
       int i, count = ipa_get_cs_argument_count (args);
-      VEC (tree, heap) *known_vals = NULL;
 
       if (e->caller->global.inlined_to)
         parms_info = IPA_NODE_REF (e->caller->global.inlined_to);
@@ -752,9 +752,9 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p,
                                           ipa_get_ith_jump_func (args, i));
          if (cst)
            {
-             if (info->conds && TREE_CODE (cst) != TREE_BINFO)
+             if (known_vals && TREE_CODE (cst) != TREE_BINFO)
                VEC_replace (tree, known_vals, i, cst);
-             else if (known_binfos_ptr != NULL)
+             else if (known_binfos_ptr != NULL && TREE_CODE (cst) == TREE_BINFO)
                VEC_replace (tree, *known_binfos_ptr, i, cst);
            }
          else if (inline_p
@@ -763,20 +763,16 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p,
                                  i)->change_prob)
            VEC_replace (tree, known_vals, i, error_mark_node);
        }
-
-      if (clause_ptr && info->conds)
-       *clause_ptr = evaluate_conditions_for_known_args (callee, inline_p,
-                                                         known_vals);
-
-      if (known_vals_ptr)
-       *known_vals_ptr = known_vals;
-      else
-       VEC_free (tree, heap, known_vals);
     }
 
-  if (clause_ptr && !info->conds)
-    for (i = 0; i < (int)VEC_length (condition, info->conds); i++)
-      *clause_ptr |= 1 << (i + predicate_first_dynamic_condition);
+  if (clause_ptr)
+    *clause_ptr = evaluate_conditions_for_known_args (callee, inline_p,
+                                                     known_vals);
+
+  if (known_vals_ptr)
+    *known_vals_ptr = known_vals;
+  else
+    VEC_free (tree, heap, known_vals);
 }