This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: More of ipa-inline housekeeping


On Sat, Apr 16, 2011 at 3:42 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Apr 13, 2011 at 3:20 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> Hi,
>> this patch moves inline_summary from field in cgraph_node into its own on side
>> datastructure. This moves it from arcane decision of mine to split all IPA data
>> into global/local datas stored in common datastructure into the scheme we
>> developed for new IPA passes some time ago.
>>
>> The advantage is that the code is more contained and less spread across the
>> compiler. We also make cgraph_node smaller and dumps more compact that never
>> hurts.
>>
>> While working on it I noticed that Richi's patch to introduce cgraph_edge
>> times/sizes is bit iffy in computing data when they are missing in the
>> datastructure. Also it computes incomming edge costs instead of outgoing that
>> leads to fact that not all edges gets their info computed for IPA inliner
>> (think of newly discovered direct calls or IPA merging).
>>
>> I fixed this on the and added sanity check that the fields are initialized.
>> This has shown problem with early inliner iteration fixed thusly and fact that
>> early inliner is attempting to compute overall growth at a time the inline
>> parameters are not computed for functions not visited by early optimizations
>> yet. We previously agreed that early inliner should not try to do that (as this
>> leads to early inliner inlining functions called once that should be deferred
>> for later consieration). ?I just hope it won't cause benchmarks to
>> regress too much ;)
>>
>> Having place to pile inline analysis info in, there is more to cleanup. The
>> cgraph_local/cgraph_global fields probably should go and the stuff from global
>> info should go into inline_summary datastructure, too (the lifetimes are
>> essentially the same so there is no need for the split). ?I will handle this
>> incrementally.
>>
>> Bootstrapped/regtested x86_64-linux with slightly modified version of the patch.
>> Re-testing with final version and intend to commit the patch tomorrow.
>>
>> Honza
>>
>> ? ? ? ?* cgraph.c (dump_cgraph_node): Do not dump inline summaries.
>> ? ? ? ?* cgraph.h (struct inline_summary): Move to ipa-inline.h
>> ? ? ? ?(cgraph_local_info): Remove inline_summary.
>> ? ? ? ?* ipa-cp.c: Include ipa-inline.h.
>> ? ? ? ?(ipcp_cloning_candidate_p, ipcp_estimate_growth,
>> ? ? ? ?ipcp_estimate_cloning_cost, ipcp_insert_stage): Use inline_summary
>> ? ? ? ?accesor.
>> ? ? ? ?* lto-cgraph.c (lto_output_node): Do not stream inline summary.
>> ? ? ? ?(input_overwrite_node): Do not set inline summary.
>> ? ? ? ?(input_node): Do not stream inline summary.
>> ? ? ? ?* ipa-inline.c (cgraph_decide_inlining): Dump inline summaries.
>> ? ? ? ?(cgraph_decide_inlining_incrementally): Do not try to estimate overall
>> ? ? ? ?growth; we do not have inline parameters computed for that anyway.
>> ? ? ? ?(cgraph_early_inlining): After inlining compute call_stmt_sizes.
>> ? ? ? ?* ipa-inline.h (struct inline_summary): Move here from ipa-inline.h
>> ? ? ? ?(inline_summary_t): New type and VECtor.
>> ? ? ? ?(debug_inline_summary, dump_inline_summaries): Declare.
>> ? ? ? ?(inline_summary): Use VOCtor.
>> ? ? ? ?(estimate_edge_growth): Kill hack computing call stmt size directly.
>> ? ? ? ?* lto-section-in.c (lto_section_name): Add inline section.
>> ? ? ? ?* ipa-inline-analysis.c: Include lto-streamer.h
>> ? ? ? ?(node_removal_hook_holder, node_duplication_hook_holder): New holders
>> ? ? ? ?(inline_node_removal_hook, inline_node_duplication_hook): New functions.
>> ? ? ? ?(inline_summary_vec): Define.
>> ? ? ? ?(inline_summary_alloc, dump_inline_summary, debug_inline_summary,
>> ? ? ? ?dump_inline_summaries): New functions.
>> ? ? ? ?(estimate_function_body_sizes): Properly compute size/time of outgoing calls.
>> ? ? ? ?(compute_inline_parameters): Alloc inline_summary; do not compute size/time
>> ? ? ? ?of incomming calls.
>> ? ? ? ?(estimate_edge_time): Avoid missing time summary hack.
>> ? ? ? ?(inline_read_summary): Read inline summary info.
>> ? ? ? ?(inline_write_summary): Write inline summary info.
>> ? ? ? ?(inline_free_summary): Free all hooks and inline summary vector.
>> ? ? ? ?* lto-streamer.h: Add LTO_section_inline_summary section.
>> ? ? ? ?* Makefile.in (ipa-cp.o, ipa-inline-analysis.o): Update dependencies.
>> ? ? ? ?* ipa.c (cgraph_remove_unreachable_nodes): Fix dump file formating.
>>
>> ? ? ? ?* lto.c: Include ipa-inline.h
>> ? ? ? ?(add_cgraph_node_to_partition, undo_partition): Use inline_summary accessor.
>> ? ? ? ?(ipa_node_duplication_hook): Fix declaration.
>> ? ? ? ?* Make-lang.in (lto.o): Update dependencies.
>
> This may have caused:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48645
>

This may be the same as

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48622

which has a small testcase.


-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]