aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-10-12 16:17:10 +0200
committerJan Hubicka <jh@suse.cz>2020-10-12 16:17:10 +0200
commit71dbabccbfb295c87d91719fe72d9d60511c0b44 (patch)
tree52fe05fe931eed416791970d44b424171b4113f9 /gcc/builtins.c
parentf10f11eb63b0ed082674d9a589e67230aa49efb5 (diff)
downloadgcc-71dbabccbfb295c87d91719fe72d9d60511c0b44.zip
gcc-71dbabccbfb295c87d91719fe72d9d60511c0b44.tar.gz
gcc-71dbabccbfb295c87d91719fe72d9d60511c0b44.tar.bz2
Cleanup ipa-modref
this is largely mechanical patch fixing some suboptimal datastructure decision in modref. It records three different things 1) optimization_summaries that are used by tree-ssa-alias to disambiguate (computed by local passes or ipa execute) 2) summaries produced by local analysis and used by the ipa execute 3) summaries_lto produced by analysis when streaming is expected, streamed, used by ipa execute All three items are stored in "summaries" datastructure where 1 dn 2 are mixed and differentiated by "finished" flags. This use extra memory and also makes it impossible to use modref while producing other IPA summaries (by ipa-prop and ipa-devirt). This patch separates the summaries into three special purpose datastructures. There is one fix to propagation in ipa_merge_modref_summary_after_inlining where check to ignore stores was placed incorrectly. This seems to lead to increased clobber disambiguations: Alias oracle query stats: refs_may_alias_p: 64267006 disambiguations, 74475486 queries ref_maybe_used_by_call_p: 142119 disambiguations, 65169365 queries call_may_clobber_ref_p: 22975 disambiguations, 28762 queries nonoverlapping_component_refs_p: 0 disambiguations, 36803 queries nonoverlapping_refs_since_match_p: 19401 disambiguations, 55550 must overlaps, 75722 queries aliasing_component_refs_p: 54714 disambiguations, 759027 queries TBAA oracle: 23636760 disambiguations 56001742 queries 16112157 are in alias set 0 10614737 queries asked about the same object 125 queries asked about the same alias set 0 access volatile 3994423 are dependent in the DAG 1643540 are aritificially in conflict with void * Modref stats: modref use: 11667 disambiguations, 40207 queries modref clobber: 1508990 disambiguations, 1829697 queries 3916688 tbaa queries (2.140621 per modref query) 623504 base compares (0.340769 per modref query) PTA query stats: pt_solution_includes: 967354 disambiguations, 13605701 queries pt_solutions_intersect: 1032982 disambiguations, 13121107 queries Bootstrapped/regtested x86_64-linux. I plan to commit it tomorrow if there are no complains. gcc/ChangeLog: 2020-10-11 Jan Hubicka <hubicka@ucw.cz> * ipa-modref.c (modref_summaries): Remove field IPA. (class modref_summary_lto): New global variable. (class modref_summaries_lto): New. (modref_summary::modref_summary): Remove loads_lto and stores_lto. (modref_summary::~modref_summary): Remove loads_lto and stores_lto. (modref_summary::useful_p): Do not use lto_useful. (modref_records_lto): New typedef. (struct modref_summary_lto): New type. (modref_summary_lto::modref_summary_lto): New member function. (modref_summary_lto::~modref_summary_lto): New member function. (modref_summary_lto::useful_p): New member function. (modref_summary::dump): Do not handle lto. (modref_summary_lto::dump): New member function. (get_modref_function_summary): Use optimization_summary. (merge_call_side_effects): Use optimization_summary. (analyze_call): Use optimization_summary. (struct summary_ptrs): New struture. (analyze_load): Update to handle separate lto and non-lto summaries. (analyze_store): Likewise. (analyze_stmt): Likewise. (remove_summary): Break out from ... (analyze_function): ... here; update to handle seprated summaries. (modref_summaries::insert): Do not handle lto summary. (modref_summaries_lto::insert): New member function. (modref_summaries::duplicate): Do not handle lto summary. (modref_summaries_lto::duplicate): New member function. (read_modref_records): Expect nolto_ret or lto_ret to be NULL> (modref_write): Write lto summary. (read_section): Handle separated summaries. (modref_read): Initialize separated summaries. (modref_transform): Handle separated summaries. (pass_modref::execute): Turn summary to optimization_summary; handle separate summaries. (ignore_edge): Handle separate summaries. (ipa_merge_modref_summary_after_inlining): Likewise. (collapse_loads): Likewise. (modref_propagate_in_scc): Likewise. (pass_ipa_modref::execute): Likewise. (ipa_modref_c_finalize): Likewise. * ipa-modref.h (modref_records_lto): Remove typedef. (struct modref_summary): Remove stores_lto, loads_lto and finished fields; remove lto_useful_p member function.
Diffstat (limited to 'gcc/builtins.c')
0 files changed, 0 insertions, 0 deletions