This is the mail archive of the
mailing list for the GCC project.
Re: New badness metric for inliner
> From: David Miller <email@example.com>
> Date: Tue, 06 Nov 2012 13:54:01 -0500 (EST)
> > From: David Miller <firstname.lastname@example.org>
> > Date: Tue, 06 Nov 2012 13:26:53 -0500 (EST)
> >> From: Jan Hubicka <email@example.com>
> >> Date: Tue, 6 Nov 2012 19:21:46 +0100
> >>> The problem here is really that MAX_TIME * MAX_FREQ do not fit into 32bit integer. Fixed thus.
> >>> * ipa-inline.c (compute_uninlined_call_time): Return gcov_type.
> >>> (compute_inlined_call_time): Watch overflows.
> >>> (relative_time_benefit): Compute in gcov_type.
> >> Thanks Jan, I'll test this right now.
> > Bootstrap still fails with this change installed:
> > ../../gcc/gcc/graphite-interchange.c:645:1: internal compiler error: in relative_time_benefit, at \
> > ipa-inline.c:785
> > }
> The problem appears to be that inline_summary (edge->caller)->time
> is negative.
> #1 0x010828a0 in relative_time_benefit (callee_info=0xf76fcb10, edge=0xf598a980, edge_time=3861) \
> at ../../gcc/gcc/ipa-inline.c:785
> (gdb) p callee_info->time
> $1200 = 3864
> (gdb) p edge->frequency
> $1201 = 263
> (gdb) p (callee_info->time * edge->frequency)
> $1202 = 1016232
> (gdb) p edge->caller->global.inlined_to
> $1203 = (cgraph_node *) 0x0
> (gdb) p edge->caller
> $1204 = (cgraph_node *) 0xf589ed10
> (gdb) p p inline_summary (edge->caller)->time
> No symbol "p" in current context.
> (gdb) p inline_summary (edge->caller)->time
> $1205 = -1044761
Hmm, this is obvoiusly wrong. All the caller time computation should be capped
to MAX_TIME that should be safe from overflows. I will dig into it tonight or
tomorrow. Sorry for the trouble.