diff options
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/predict.c b/gcc/predict.c index aceca1d..5d3de29 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -134,13 +134,20 @@ maybe_hot_frequency_p (struct function *fun, int freq) static inline bool maybe_hot_count_p (struct function *fun, gcov_type count) { - if (profile_status_for_function (fun) != PROFILE_READ) + gcov_working_set_t *ws; + static gcov_type min_count = -1; + if (fun && profile_status_for_function (fun) != PROFILE_READ) return true; /* Code executed at most once is not hot. */ if (profile_info->runs >= count) return false; - return (count - > profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)); + if (min_count == -1) + { + ws = find_working_set (PARAM_VALUE (HOT_BB_COUNT_WS_PERMILLE)); + gcc_assert (ws); + min_count = ws->min_counter; + } + return (count >= min_count); } /* Return true in case BB can be CPU intensive and should be optimized @@ -161,8 +168,8 @@ bool cgraph_maybe_hot_edge_p (struct cgraph_edge *edge) { if (profile_info && flag_branch_probabilities - && (edge->count - <= profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION))) + && !maybe_hot_count_p (NULL, + edge->count)) return false; if (edge->caller->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED || (edge->callee |