re PR ipa/85051 (ICE: in edge_badness, at ipa-inline.c:1035 with flattening recursive...
authorJan Hubicka <hubicka@ucw.cz>
Thu, 18 Apr 2019 17:03:00 +0000 (19:03 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 18 Apr 2019 17:03:00 +0000 (17:03 +0000)
PR ipa/85051
* ipa-inline.c (flatten_function): New parameter UPDATE.
(ipa_inline, early_inliner): Use it.

From-SVN: r270446

gcc/ChangeLog
gcc/ipa-inline.c

index 44a8387..43100ca 100644 (file)
@@ -1,3 +1,9 @@
+2019-04-18  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/85051
+       * ipa-inline.c (flatten_function): New parameter UPDATE.
+       (ipa_inline, early_inliner): Use it.
+
 2019-04-18  Richard Sandiford  <richard.sandiford@arm.com>
 
        * fold-const.c (int_const_binop): Return early on failure.
index f37cd9d..745bdf3 100644 (file)
@@ -2134,7 +2134,7 @@ inline_small_functions (void)
    at IPA inlining time.  */
 
 static void
-flatten_function (struct cgraph_node *node, bool early)
+flatten_function (struct cgraph_node *node, bool early, bool update)
 {
   struct cgraph_edge *e;
 
@@ -2164,7 +2164,7 @@ flatten_function (struct cgraph_node *node, bool early)
         it in order to fully flatten the leaves.  */
       if (!e->inline_failed)
        {
-         flatten_function (callee, early);
+         flatten_function (callee, early, false);
          continue;
        }
 
@@ -2204,14 +2204,15 @@ flatten_function (struct cgraph_node *node, bool early)
       inline_call (e, true, NULL, NULL, false);
       if (e->callee != orig_callee)
        orig_callee->aux = (void *) node;
-      flatten_function (e->callee, early);
+      flatten_function (e->callee, early, false);
       if (e->callee != orig_callee)
        orig_callee->aux = NULL;
     }
 
   node->aux = NULL;
-  if (!node->global.inlined_to)
-    ipa_update_overall_fn_summary (node);
+  if (update)
+    ipa_update_overall_fn_summary (node->global.inlined_to
+                                  ? node->global.inlined_to : node);
 }
 
 /* Inline NODE to all callers.  Worker for cgraph_for_node_and_aliases.
@@ -2519,7 +2520,7 @@ ipa_inline (void)
         function.  */
       if (dump_file)
        fprintf (dump_file, "Flattening %s\n", node->name ());
-      flatten_function (node, false);
+      flatten_function (node, false, true);
     }
 
   if (j < nnodes - 2)
@@ -2782,7 +2783,7 @@ early_inliner (function *fun)
       if (dump_enabled_p ())
        dump_printf (MSG_OPTIMIZED_LOCATIONS,
                     "Flattening %C\n", node);
-      flatten_function (node, true);
+      flatten_function (node, true, true);
       inlined = true;
     }
   else