diff options
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cgraph.c | 16 |
2 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d07b88a..bdc3067 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2019-11-10 Jan Hubicka <hubicka@ucw.cz> + * cgraph.c (cgraph_edge::maybe_hot_p): Do not use sreal_frequency. + +2019-11-10 Jan Hubicka <hubicka@ucw.cz> + * ipa-prop.c (ipa_propagate_indirect_call_infos): Remove ipa edge args summaries of inlined edge unless it holds info about described reference. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 96f1261..aa54e95 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; } |