]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ipa-inline.c (leaf_node_p): Rename to ...
authorJan Hubicka <jh@suse.cz>
Mon, 5 Nov 2012 11:10:18 +0000 (12:10 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Mon, 5 Nov 2012 11:10:18 +0000 (11:10 +0000)
* ipa-inline.c (leaf_node_p): Rename to ...
(num_calls) ... this one.
(want_early_inline_function_p): Allow smal growth on non-leafs.

From-SVN: r193157

gcc/ChangeLog
gcc/ipa-inline.c

index 16f3a655ad8ce7bb19f1037f94885647de1d73a7..bca01787be484fdc32dd34ef4b747c59c0f347c9 100644 (file)
@@ -1,3 +1,9 @@
+2012-11-05  Jan Hubicka  <jh@suse.cz>
+
+       * ipa-inline.c (leaf_node_p): Rename to ...
+       (num_calls) ... this one.
+       (want_early_inline_function_p): Allow smal growth on non-leafs.
+
 2012-11-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/54402
index 5154273e371d4d9a25620b80ee507c6132de740f..2bca2c5fa97e33ed44d2cbd544972df00bfaef7f 100644 (file)
@@ -380,17 +380,18 @@ can_early_inline_edge_p (struct cgraph_edge *e)
 }
 
 
-/* Return true when N is leaf function.  Accept cheap builtins
-   in leaf functions.  */
+/* Return number of calls in N.  Ignore cheap builtins.  */
 
-static bool
-leaf_node_p (struct cgraph_node *n)
+static int
+num_calls (struct cgraph_node *n)
 {
   struct cgraph_edge *e;
+  int num = 0;
+
   for (e = n->callees; e; e = e->next_callee)
     if (!is_inexpensive_builtin (e->callee->symbol.decl))
-      return false;
-  return true;
+      num++;
+  return num;
 }
 
 
@@ -414,6 +415,8 @@ want_early_inline_function_p (struct cgraph_edge *e)
   else
     {
       int growth = estimate_edge_growth (e);
+      int n;
+
       if (growth <= 0)
        ;
       else if (!cgraph_maybe_hot_edge_p (e)
@@ -427,22 +430,23 @@ want_early_inline_function_p (struct cgraph_edge *e)
                     growth);
          want_inline = false;
        }
-      else if (!leaf_node_p (callee)
-              && growth > 0)
+      else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
        {
          if (dump_file)
            fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
-                    "callee is not leaf and code would grow by %i\n",
+                    "growth %i exceeds --param early-inlining-insns\n",
                     xstrdup (cgraph_node_name (e->caller)), e->caller->uid,
                     xstrdup (cgraph_node_name (callee)), callee->uid,
                     growth);
          want_inline = false;
        }
-      else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
+      else if ((n = num_calls (callee)) != 0
+              && growth * (n + 1) > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
        {
          if (dump_file)
            fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
-                    "growth %i exceeds --param early-inlining-insns\n",
+                    "growth %i exceeds --param early-inlining-insns "
+                    "divided by number of calls\n",
                     xstrdup (cgraph_node_name (e->caller)), e->caller->uid,
                     xstrdup (cgraph_node_name (callee)), callee->uid,
                     growth);