This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Use get_create for fn_summary (PR ipa/87491).
- From: Martin Liška <mliska at suse dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Jan Hubicka <hubicka at ucw dot cz>
- Date: Wed, 3 Oct 2018 10:56:03 +0200
- Subject: [PATCH] Use get_create for fn_summary (PR ipa/87491).
Hi.
There's one another ICE when calling fn_summary->get for a node
that's not present. Back-trace is:
(gdb) bt
#0 inline_to_all_callers (node=<cgraph_node * 0x7ffff698f5a0 "*.LTHUNK0"/2>, data=0x7fffffffd690) at /home/marxin/Programming/gcc/gcc/ipa-inline.c:2260
#1 0x0000000000b0b2c1 in cgraph_node::call_for_symbol_and_aliases (include_overwritable=<optimized out>, data=<optimized out>, callback=<optimized out>, this=<optimized out>) at /home/marxin/Programming/gcc/gcc/cgraph.h:3221
#2 cgraph_node::call_for_symbol_and_aliases_1 (this=this@entry=<cgraph_node * const 0x7ffff698f438 "a"/1>, callback=callback@entry=0x1737440 <inline_to_all_callers(cgraph_node*, void*)>, data=data@entry=0x7fffffffd690,
include_overwritable=include_overwritable@entry=true) at /home/marxin/Programming/gcc/gcc/cgraph.c:3745
#3 0x0000000001739422 in cgraph_node::call_for_symbol_and_aliases (include_overwritable=true, data=0x7fffffffd690, callback=0x1737440 <inline_to_all_callers(cgraph_node*, void*)>, this=<cgraph_node * const 0x7ffff698f438 "a"/1>)
at /home/marxin/Programming/gcc/gcc/cgraph.h:3225
#4 ipa_inline () at /home/marxin/Programming/gcc/gcc/ipa-inline.c:2581
with -fdump-ipa-all -fno-inline-small-functions -O3.
The problematic symbol is:
(gdb) p node
$1 = <cgraph_node * 0x7ffff698f5a0 "*.LTHUNK0"/2>
(gdb) p node->debug()
*.LTHUNK0/2 (int B::*.LTHUNK0(int, int)) @0x7ffff698f5a0
Type: function definition analyzed alias cpp_implicit_alias
Visibility: prevailing_def_ironly artificial
References: _ZN1B1aEii/1 (alias)
Referring:
Availability: available
First run: 0
Function flags:
Called by: virtual int B::_ZTv0_n24_N1B1aEii(int, int)/3 (can throw external)
Calls:
Hope it's fine to use get_create and let the symbol be inlined?
Patch survives tests on x86_64-linux-gnu.
Ready for trunk?
Martin
gcc/ChangeLog:
2018-10-03 Martin Liska <mliska@suse.cz>
PR ipa/87491
* ipa-inline.c (inline_to_all_callers_1): Use ::get_create
at place where we can have a function that's not
in summary.
---
gcc/ipa-inline.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 025788522fb..eea2888011c 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -2222,7 +2222,7 @@ inline_to_all_callers_1 (struct cgraph_node *node, void *data,
fprintf (dump_file,
"\nInlining %s size %i.\n",
node->name (),
- ipa_fn_summaries->get (node)->size);
+ ipa_fn_summaries->get_create (node)->size);
fprintf (dump_file,
" Called once from %s %i insns.\n",
node->callers->caller->name (),