X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fipa-inline.c;h=e18a0cd0ddd42899a829f4795fd036f7f32cb61d;hp=751966cefb21492e2450d616686376a7284012b2;hb=f730f36c4c1fe1dfc04e0a8a627fb3374276d2be;hpb=36595f6490217826e8834d94d0fbd86eb2ddcf89 diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 751966cefb2..e18a0cd0ddd 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -285,6 +285,7 @@ cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, + inline_summary (e->callee)->estimated_self_stack_size; if (e->callee->global.inlined_to->global.estimated_stack_size < peak) e->callee->global.inlined_to->global.estimated_stack_size = peak; + cgraph_propagate_frequency (e->callee); /* Recursively clone all bodies. */ for (e = e->callee->callees; e; e = e->next_callee) @@ -309,10 +310,7 @@ cgraph_mark_inline_edge (struct cgraph_edge *e, bool update_original, gcc_assert (e->inline_failed); e->inline_failed = CIF_OK; - - if (!e->callee->global.inlined) - DECL_POSSIBLY_INLINED (e->callee->decl) = true; - e->callee->global.inlined = true; + DECL_POSSIBLY_INLINED (e->callee->decl) = true; cgraph_clone_inlined_nodes (e, true, update_original); @@ -1024,8 +1022,9 @@ cgraph_decide_inlining_of_small_functions (void) " Estimated growth after inlined into all callees is %+i insns.\n" " Estimated badness is %i, frequency %.2f.\n", cgraph_node_name (edge->caller), - gimple_filename ((const_gimple) edge->call_stmt), - gimple_lineno ((const_gimple) edge->call_stmt), + flag_wpa ? "unknown" + : gimple_filename ((const_gimple) edge->call_stmt), + flag_wpa ? -1 : gimple_lineno ((const_gimple) edge->call_stmt), cgraph_estimate_growth (edge->callee), badness, edge->frequency / (double)CGRAPH_FREQ_BASE); @@ -1200,8 +1199,9 @@ cgraph_decide_inlining_of_small_functions (void) " Estimated growth after inlined into all callees is %+i insns.\n" " Estimated badness is %i, frequency %.2f.\n", cgraph_node_name (edge->caller), - gimple_filename ((const_gimple) edge->call_stmt), - gimple_lineno ((const_gimple) edge->call_stmt), + flag_wpa ? "unknown" + : gimple_filename ((const_gimple) edge->call_stmt), + flag_wpa ? -1 : gimple_lineno ((const_gimple) edge->call_stmt), cgraph_estimate_growth (edge->callee), badness, edge->frequency / (double)CGRAPH_FREQ_BASE); @@ -1319,6 +1319,8 @@ cgraph_decide_inlining (void) cgraph_remove_function_insertion_hook (function_insertion_hook_holder); if (in_lto_p && flag_indirect_inlining) ipa_update_after_lto_read (); + if (flag_indirect_inlining) + ipa_create_all_structures_for_iinln (); max_count = 0; max_benefit = 0; @@ -1416,13 +1418,14 @@ cgraph_decide_inlining (void) if (cgraph_check_inline_limits (node->callers->caller, node, &reason, false)) { + struct cgraph_node *caller = node->callers->caller; cgraph_mark_inline (node->callers); if (dump_file) fprintf (dump_file, " Inlined into %s which now has %i size" " for a net change of %+i size.\n", - cgraph_node_name (node->callers->caller), - node->callers->caller->global.size, + cgraph_node_name (caller), + caller->global.size, overall_size - old_size); } else @@ -1438,7 +1441,7 @@ cgraph_decide_inlining (void) /* Free ipa-prop structures if they are no longer needed. */ if (flag_indirect_inlining) - free_all_ipa_structures_after_iinln (); + ipa_free_all_structures_after_iinln (); if (dump_file) fprintf (dump_file, @@ -2091,7 +2094,8 @@ inline_read_summary (void) active, we don't need to write them twice. */ static void -inline_write_summary (cgraph_node_set set) +inline_write_summary (cgraph_node_set set, + varpool_node_set vset ATTRIBUTE_UNUSED) { if (flag_indirect_inlining && !flag_ipa_cp) ipa_prop_write_jump_functions (set); @@ -2127,13 +2131,14 @@ struct ipa_opt_pass_d pass_ipa_inline = 0, /* properties_destroyed */ TODO_remove_functions, /* todo_flags_finish */ TODO_dump_cgraph | TODO_dump_func - | TODO_remove_functions /* todo_flags_finish */ + | TODO_remove_functions | TODO_ggc_collect /* todo_flags_finish */ }, inline_generate_summary, /* generate_summary */ inline_write_summary, /* write_summary */ inline_read_summary, /* read_summary */ - NULL, /* function_read_summary */ - lto_ipa_fixup_call_notes, /* stmt_fixup */ + NULL, /* write_optimization_summary */ + NULL, /* read_optimization_summary */ + NULL, /* stmt_fixup */ 0, /* TODOs */ inline_transform, /* function_transform */ NULL, /* variable_transform */