From d07f74faa60a3604b14e1ad7c25ac983731f0394 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 10 Nov 2019 19:10:51 +0100 Subject: [PATCH] * cgraph.c (cgraph_edge::maybe_hot_p): Do not use sreal_frequency. From-SVN: r278021 --- gcc/ChangeLog | 4 ++++ gcc/cgraph.c | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d07b88a3a6b..bdc3067e63c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2019-11-10 Jan Hubicka + + * cgraph.c (cgraph_edge::maybe_hot_p): Do not use sreal_frequency. + 2019-11-10 Jan Hubicka * ipa-prop.c (ipa_propagate_indirect_call_infos): Remove ipa edge diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 96f1261f0cc..aa54e955c76 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -2697,14 +2697,18 @@ cgraph_edge::maybe_hot_p (void) return false; if (caller->frequency == NODE_FREQUENCY_HOT) return true; - /* If profile is now known yet, be conservative. - FIXME: this predicate is used by early inliner and can do better there. */ - if (symtab->state < IPA_SSA) + if (!count.initialized_p ()) return true; - if (caller->frequency == NODE_FREQUENCY_EXECUTED_ONCE - && sreal_frequency () * 2 < 3) + cgraph_node *where = caller->inlined_to ? caller->inlined_to : caller; + if (!where->count.initialized_p ()) return false; - if (sreal_frequency () * PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION) <= 1) + if (caller->frequency == NODE_FREQUENCY_EXECUTED_ONCE) + { + if (count.apply_scale (2, 1) < where->count.apply_scale (3, 1)) + return false; + } + else if (count.apply_scale (PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION), 1) + < where->count) return false; return true; } -- 2.30.2