This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/55797] [4.8 Regression] ICE: verify_cgraph_node failed: edge has no corresponding call_stmt
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 08 Jan 2013 13:50:58 +0000
- Subject: [Bug middle-end/55797] [4.8 Regression] ICE: verify_cgraph_node failed: edge has no corresponding call_stmt
- Auto-submitted: auto-generated
- References: <bug-55797-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55797
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-08 13:50:58 UTC ---
Eh, we do totally crazy (recursive) inlining here ...
struct section_info
{
intrusive_ptr < section_info > parent;
};
struct file_info
{
intrusive_ptr < file_info > parent;
intrusive_ptr < section_info > switched_section;
};
so the simple
void
start_file (void)
{
intrusive_ptr < file_info > parent;
}
creates and destroys the graph of file_info / section_info nodes
with the edges represented by intrusive_ptr's.
void start_file() ()
{
...
<bb 2>:
_5 = parent.px;
if (_5 != 0B)
goto <bb 3>;
else
goto <bb 1041> (<L3>);
<bb 3>:
_6 = &_5->switched_section;
_7 = _6->px;
if (_7 != 0B)
goto <bb 4>;
else
goto <bb 6> (<L1>);
<bb 4>:
section_info::~section_info (_7);
<bb 5>:
operator delete (_7);
...
and 1000 calls follow.
I wonder why we need such high early-inlin-insns number and for lower we hit:
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 "
"divided by number of calls\n",
xstrdup (cgraph_node_name (e->caller)), e->caller->uid,
xstrdup (cgraph_node_name (callee)), callee->uid,
growth);
want_inline = false;
}
of which I cannot make very much sense. Why should the number of calls
in callee(!) times the growth matter? Shouldn't this be the number
of times the caller calls callee? And why even that? We've gone completely
away from the "consider only if all calls can be inlined" way of early
inline operation!