aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2019-04-18 19:03:00 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2019-04-18 17:03:00 +0000
commitf6e809c849c8d0e0bfe5fa14bda0e663e0a65859 (patch)
treebb5b19c1f1ff17452564e8cd1a3378be8774e280 /gcc
parent7f0964e6f146e333b2d97b1f1a8518a733f3cc17 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/ipa-inline.c15
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