Avoid sreal in cgrpah_maybe_hot_p
Jan Hubicka
hubicka@ucw.cz
Sun Nov 10 18:16:00 GMT 2019
Hi,
while looking into performance issues with too much of sreal use in
inliner I nocited that in maybe_hot_p it is used just to hold a fraction
which is easily done on profile_counters, too.
This has also advantage that it will work with partially guessed static
profiles which are there during early inlining.
Bootstrapped/regtested x86_64-linux, comitted.
* cgraph.c (cgraph_edge::maybe_hot_p): Do not use sreal_frequency.
Index: cgraph.c
===================================================================
--- cgraph.c (revision 278020)
+++ cgraph.c (working copy)
@@ -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;
}
More information about the Gcc-patches
mailing list