mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 05:40:26 +08:00
re PR middle-end/28779 (internal compiler error: in cgraph_estimate_size_after_inlining, at ipa-inline.c:106)
PR middle-end/28779 * ipa-inline.c (cgraph_decide_inlining, cgraph_early_inlining): Compute function body sizes. * cgraphunit.c (cgraph_analyze_function): Don't do so. From-SVN: r116274
This commit is contained in:
parent
96ddac7425
commit
1057fc810f
@ -1,4 +1,11 @@
|
||||
006-08-20 Danny Smith <dannysmith@users.sourceforge.net>
|
||||
2006-08-20 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR middle-end/28779
|
||||
* ipa-inline.c (cgraph_decide_inlining, cgraph_early_inlining): Compute
|
||||
function body sizes.
|
||||
* cgraphunit.c (cgraph_analyze_function): Don't do so.
|
||||
|
||||
2006-08-20 Danny Smith <dannysmith@users.sourceforge.net>
|
||||
|
||||
PR target/28648 c:
|
||||
* tree.c (handle_dll_attribute): Return early if not a
|
||||
|
@ -928,7 +928,8 @@ cgraph_analyze_function (struct cgraph_node *node)
|
||||
cgraph_create_edges (node, decl);
|
||||
|
||||
node->local.inlinable = tree_inlinable_function_p (decl);
|
||||
node->local.self_insns = estimate_num_insns (decl);
|
||||
if (!flag_unit_at_a_time)
|
||||
node->local.self_insns = estimate_num_insns (decl);
|
||||
if (node->local.inlinable)
|
||||
node->local.disregard_inline_limits
|
||||
= lang_hooks.tree_inlining.disregard_inline_limits (decl);
|
||||
|
@ -899,13 +899,23 @@ cgraph_decide_inlining (void)
|
||||
timevar_push (TV_INLINE_HEURISTICS);
|
||||
max_count = 0;
|
||||
for (node = cgraph_nodes; node; node = node->next)
|
||||
{
|
||||
struct cgraph_edge *e;
|
||||
initial_insns += node->local.self_insns;
|
||||
for (e = node->callees; e; e = e->next_callee)
|
||||
if (max_count < e->count)
|
||||
max_count = e->count;
|
||||
}
|
||||
if (node->analyzed && (node->needed || node->reachable))
|
||||
{
|
||||
struct cgraph_edge *e;
|
||||
|
||||
/* At the moment, no IPA passes change function bodies before inlining.
|
||||
Save some time by not recomputing function body sizes if early inlining
|
||||
already did so. */
|
||||
if (!flag_early_inlining)
|
||||
node->local.self_insns = node->global.insns
|
||||
= estimate_num_insns (node->decl);
|
||||
|
||||
initial_insns += node->local.self_insns;
|
||||
gcc_assert (node->local.self_insns == node->global.insns);
|
||||
for (e = node->callees; e; e = e->next_callee)
|
||||
if (max_count < e->count)
|
||||
max_count = e->count;
|
||||
}
|
||||
overall_insns = initial_insns;
|
||||
gcc_assert (!max_count || (profile_info && flag_branch_probabilities));
|
||||
|
||||
@ -1177,6 +1187,13 @@ cgraph_early_inlining (void)
|
||||
|
||||
order = ggc_alloc (sizeof (*order) * cgraph_n_nodes);
|
||||
nnodes = cgraph_postorder (order);
|
||||
for (i = nnodes - 1; i >= 0; i--)
|
||||
{
|
||||
node = order[i];
|
||||
if (node->analyzed && (node->needed || node->reachable))
|
||||
node->local.self_insns = node->global.insns
|
||||
= estimate_num_insns (node->decl);
|
||||
}
|
||||
for (i = nnodes - 1; i >= 0; i--)
|
||||
{
|
||||
node = order[i];
|
||||
|
Loading…
x
Reference in New Issue
Block a user