From 151b9ff52a095baa99b7cd3f392f82b221d81f98 Mon Sep 17 00:00:00 2001 From: hubicka Date: Fri, 10 Nov 2017 20:14:52 +0000 Subject: * auto-profile.c (afdo_indirect_call): Drop frequency. * cgraph.c (symbol_table::create_edge): Drop frequency argument. (cgraph_node::create_edge): Drop frequency argument. (cgraph_node::create_indirect_edge): Drop frequency argument. (cgraph_edge::make_speculative): Drop frequency arguments. (cgraph_edge::resolve_speculation): Do not update frequencies (cgraph_edge::dump_edge_flags): Do not dump frequency. (cgraph_node::dump): Check consistency in IPA mode. (cgraph_edge::maybe_hot_p): Use IPA counter. (cgraph_edge::verify_count_and_frequency): Rename to ... (cgraph_edge::verify_count): ... this one; drop frequency checking. (cgraph_node::verify_node): Update. * cgraph.h (struct cgraph_edge): Drop frequency. (cgraph_edge::frequency): New function. * cgraphbuild.c (pass_build_cgraph_edges::execute): Donot pass frequencies. (cgraph_edge::rebuild_edges): Likewise. * cgraphclones.c (cgraph_edge::clone): Scale only counts. (duplicate_thunk_for_node): Do not pass frequency. (cgraph_node::create_clone): Scale only counts. (cgraph_node::create_virtual_clone): Do not pass frequency. (cgraph_node::create_edge_including_clones): Do not pass frequency. (cgraph_node::create_version_clone): Do not pass frequency. * cgraphunit.c (cgraph_node::analyze): Do not pass frequency. (cgraph_node::expand_thunk): Do not pass frequency. (cgraph_node::create_wrapper): Do not pass frequency. * gimple-iterator.c (update_call_edge_frequencies): Do not pass frequency. * gimple-streamer-in.c (input_bb): Scale only IPA counts. * ipa-chkp.c (chkp_produce_thunks): Do not pass frequency. * ipa-cp.c (ipcp_lattice::print): Use frequency function. (gather_caller_stats): Use frequency function. (ipcp_cloning_candidate_p): Use frequency function. (ipcp_propagate_stage): Use frequency function. (get_info_about_necessary_edges): Use frequency function. (update_profiling_info): Update only IPA profile. (update_specialized_profile): Use frequency functoin. (perhaps_add_new_callers): Update only IPA profile. * ipa-devirt.c (ipa_devirt): Use IPA profile. * ipa-fnsummary.c (redirect_to_unreachable): Do not set frequrency. (dump_ipa_call_summary): Use frequency function. (estimate_edge_size_and_time): Use frequency function. (ipa_merge_fn_summary_after_inlining): Use frequency function. * ipa-inline-analysis.c (do_estimate_edge_time): Use IPA profile. * ipa-inline-transform.c (update_noncloned_frequencies): Rename to .. (update_noncloned_counts): ... ths one; scale counts only. (clone_inlined_nodes): Do not scale frequency. (inline_call): Do not pass frequency. * ipa-inline.c (compute_uninlined_call_time): Use IPA profile. (compute_inlined_call_time): Use IPA profile. (want_inline_small_function_p): Use IPA profile. (want_inline_self_recursive_call_p): Use IPA profile. (edge_badness): Use IPA profile. (lookup_recursive_calls): Use IPA profile. (recursive_inlining): Do not pass frequency. (resolve_noninline_speculation): Do not update frequency. (inline_small_functions): Collect max of IPA profile. (dump_overall_stats): Dump IPA porfile. (dump_inline_stats): Dump IPA porfile. (ipa_inline): Collect IPA stats. * ipa-inline.h (clone_inlined_nodes): Update prototype. * ipa-profile.c (ipa_propagate_frequency_1): Use frequency function. (ipa_propagate_frequency): Use frequency function. (ipa_profile): Cleanup. * ipa-prop.c (ipa_make_edge_direct_to_target): Do not pass frequency * ipa-utils.c (ipa_merge_profiles): Merge all profiles. * lto-cgraph.c (lto_output_edge): Do not stream frequency. (input_node): Do not stream frequency. (input_edge): Do not stream frequency. (merge_profile_summaries): Scale only IPA profiles. * omp-simd-clone.c (simd_clone_adjust): Do not pass frequency. * predict.c (drop_profile): Do not recompute frequency. * trans-mem.c (ipa_tm_insert_irr_call): Do not pass frequency. (ipa_tm_insert_gettmclone_call): Do not pass frequency. * tree-cfg.c (execute_fixup_cfg): Drop profile to global0 if needed. * tree-chkp.c (chkp_copy_bounds_for_assign): Do not pass frequency. * tree-emutls.c (gen_emutls_addr): Do not pass frequency. * tree-inline.c (copy_bb): Do not scale frequency. (expand_call_inline): Do not scale frequency. (tree_function_versioning): Do not scale frequency. * ubsan.c (ubsan_create_edge): Do not pass frequency. lto/ChangeLog: 2017-11-10 Jan Hubicka * lto-partition.c (lto_balanced_map): Use frequency accessor. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254636 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ipa-utils.c | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) (limited to 'gcc/ipa-utils.c') diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c index e9ab78cdabb..808db436b6a 100644 --- a/gcc/ipa-utils.c +++ b/gcc/ipa-utils.c @@ -404,17 +404,18 @@ ipa_merge_profiles (struct cgraph_node *dst, /* FIXME when we merge in unknown profile, we ought to set counts as unsafe. */ - if (!src->count.initialized_p ()) + if (!src->count.initialized_p () + || !(src->count.ipa () == src->count)) return; if (symtab->dump_file) { fprintf (symtab->dump_file, "Merging profiles of %s to %s\n", src->dump_name (), dst->dump_name ()); } - if (dst->count.initialized_p ()) - dst->count += src->count; - else - dst->count = src->count; + if (dst->count.initialized_p () && dst->count.ipa () == dst->count) + dst->count += src->count.ipa (); + else + dst->count = src->count.ipa (); /* This is ugly. We need to get both function bodies into memory. If declaration is merged, we need to duplicate it to be able @@ -564,18 +565,12 @@ ipa_merge_profiles (struct cgraph_node *dst, { if (e->speculative) continue; - e->count = gimple_bb (e->call_stmt)->count.ipa (); - e->frequency = compute_call_stmt_bb_frequency - (dst->decl, - gimple_bb (e->call_stmt)); + e->count = gimple_bb (e->call_stmt)->count; } for (e = dst->indirect_calls, e2 = src->indirect_calls; e; e2 = (e2 ? e2->next_callee : NULL), e = e->next_callee) { profile_count count = gimple_bb (e->call_stmt)->count; - int freq = compute_call_stmt_bb_frequency - (dst->decl, - gimple_bb (e->call_stmt)); /* When call is speculative, we need to re-distribute probabilities the same way as they was. This is not really correct because in the other copy the speculation may differ; but probably it @@ -624,12 +619,6 @@ ipa_merge_profiles (struct cgraph_node *dst, indirect->count += indirect2->count; } } - int prob = direct->count.probability_in (direct->count - + indirect->count). - to_reg_br_prob_base (); - direct->frequency = RDIV (freq * prob, REG_BR_PROB_BASE); - indirect->frequency = RDIV (freq * (REG_BR_PROB_BASE - prob), - REG_BR_PROB_BASE); } else /* At the moment we should have only profile feedback based @@ -642,18 +631,11 @@ ipa_merge_profiles (struct cgraph_node *dst, ipa_ref *ref; e2->speculative_call_info (direct, indirect, ref); - e->count = count.ipa (); - e->frequency = freq; - int prob = direct->count.probability_in (e->count) - .to_reg_br_prob_base (); - e->make_speculative (direct->callee, direct->count, - RDIV (freq * prob, REG_BR_PROB_BASE)); + e->count = count; + e->make_speculative (direct->callee, direct->count); } else - { - e->count = count.ipa (); - e->frequency = freq; - } + e->count = count; } if (!preserve_body) src->release_body (); -- cgit v1.2.1 From 688b6bc6943dc52195ca8748fdb741a4ad719bc0 Mon Sep 17 00:00:00 2001 From: hubicka Date: Tue, 14 Nov 2017 09:18:35 +0000 Subject: * auto-profile.c (afdo_annotate_cfg): Use update_max_bb_count. * cgraphunit.c (cgraph_node::expand_thunk): Use update_max_bb_count. * ipa-utils.c (ipa_merge_profiles): Use update_max_bb_count. * lto-streamer-in.c (input_function): Use update_max_bb_count. * omp-expand.c (expand_omp_taskreg): Use update_max_bb_count. * predict.c (maybe_hot_frequency_p): Inline to ... (maybe_hot_count_p): ... here; rewrite to counts. (counts_to_freqs): Rename to ... (update_max_bb_count): ... this one. (expensive_function_p): Use counts. (estimate_bb_frequencies): Update. (rebuild_frequencies): Update. * predict.h (counts_to_freqs): Rename to ... (update_max_bb_count): ... this one. * profile.c (compute_branch_probabilities): Add debug info * tree-inline.c (expand_call_inline): Update debug info. (optimize_inline_calls): Use update_max_bb_count.. (tree_function_versioning): Use update_max_bb_count.. * value-prof.c (gimple_value_profile_transformations): Do not use update_max_bb_count. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254725 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ipa-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/ipa-utils.c') diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c index 808db436b6a..c991bddd7dd 100644 --- a/gcc/ipa-utils.c +++ b/gcc/ipa-utils.c @@ -558,7 +558,7 @@ ipa_merge_profiles (struct cgraph_node *dst, } } push_cfun (dstcfun); - counts_to_freqs (); + update_max_bb_count (); compute_function_frequency (); pop_cfun (); for (e = dst->callees; e; e = e->next_callee) -- cgit v1.2.1