From ab810952eb7c061e37054ddd1dfe0aa033365131 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Wed, 27 Oct 2021 14:49:02 +0200 Subject: [PATCH] ipa-cp: Use profile counters (or not) based on local availability This is a follow-up small patch to address Honza's review of my previous patch to select saner profile count to base heuristics on. Currently the IPA-CP heuristics switch to PGO-mode only if there are PGO counters available for any part of the call graph. This change makes it to switch to the PGO mode only if any of the incoming edges bringing in the constant in question had any ipa-quality counts on them. Consequently, if a part of the program is built with -fprofile-use and another part without, IPA-CP will use estimated-frequency-based heuristics for the latter. I still wonder whether this should only happen with flag_profile_partial_training on. It seems like we're behaving as if it was always on. gcc/ChangeLog: 2021-10-18 Martin Jambor * ipa-cp.c (good_cloning_opportunity_p): Decide whether to use profile feedback depending on their local availability. --- gcc/ipa-cp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 4d07a6d..703541d 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -3311,9 +3311,9 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit, ipa_node_params *info = ipa_node_params_sum->get (node); int eval_threshold = opt_for_fn (node->decl, param_ipa_cp_eval_threshold); - if (base_count > profile_count::zero ()) + if (count_sum > profile_count::zero ()) { - + gcc_assert (base_count > profile_count::zero ()); sreal factor = count_sum.probability_in (base_count).to_sreal (); sreal evaluation = (time_benefit * factor) / size_cost; evaluation = incorporate_penalties (node, info, evaluation); -- 2.7.4