diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2019-04-18 19:03:00 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2019-04-18 17:03:00 +0000 |
commit | f6e809c849c8d0e0bfe5fa14bda0e663e0a65859 (patch) | |
tree | bb5b19c1f1ff17452564e8cd1a3378be8774e280 /gcc | |
parent | 7f0964e6f146e333b2d97b1f1a8518a733f3cc17 (diff) | |
download | gcc-f6e809c849c8d0e0bfe5fa14bda0e663e0a65859.zip gcc-f6e809c849c8d0e0bfe5fa14bda0e663e0a65859.tar.gz gcc-f6e809c849c8d0e0bfe5fa14bda0e663e0a65859.tar.bz2 |
re PR ipa/85051 (ICE: in edge_badness, at ipa-inline.c:1035 with flattening recursive calls)
PR ipa/85051
* ipa-inline.c (flatten_function): New parameter UPDATE.
(ipa_inline, early_inliner): Use it.
From-SVN: r270446
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 15 |
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 44a8387..43100ca 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index f37cd9d..745bdf3 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -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 |