diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c5690fcd8e42..b20e8b23769f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-08-31 Jan Hubicka <jh@suse.cz> + + * postreload-gcse.c (eliminate_partially_redundant_loads): Use optimize_bb_for_size_p. + * predict.c (maybe_hot_frequency_p): Make inline. + (maybe_hot_count_p): Break out from ... + (maybe_hot_bb_p): ... this one. + (maybe_hot_edge_p): Simplify. + * basic-block.h (probably_cold_bb_p): Remove. + 2008-08-31 Jakub Jelinek <jakub@redhat.com> PR target/37168 diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 59a6f4aca9cb..9b759b001478 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -829,7 +829,6 @@ extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *); /* In predict.c */ extern bool maybe_hot_bb_p (const_basic_block); extern bool maybe_hot_edge_p (edge); -extern bool probably_cold_bb_p (const_basic_block); extern bool probably_never_executed_bb_p (const_basic_block); extern bool optimize_bb_for_size_p (const_basic_block); extern bool optimize_bb_for_speed_p (const_basic_block); diff --git a/gcc/postreload-gcse.c b/gcc/postreload-gcse.c index 884830abebd2..57be7a5c39c5 100644 --- a/gcc/postreload-gcse.c +++ b/gcc/postreload-gcse.c @@ -1173,7 +1173,7 @@ eliminate_partially_redundant_loads (void) continue; /* Do not try anything on cold basic blocks. */ - if (probably_cold_bb_p (bb)) + if (optimize_bb_for_size_p (bb)) continue; /* Reset the table of things changed since the start of the current diff --git a/gcc/predict.c b/gcc/predict.c index e02f9f890c2f..183ae8fa7cb6 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -110,7 +110,8 @@ static const struct predictor_info predictor_info[]= { #undef DEF_PREDICTOR /* Return TRUE if frequency FREQ is considered to be hot. */ -static bool + +static inline bool maybe_hot_frequency_p (int freq) { if (!profile_info || !flag_branch_probabilities) @@ -127,17 +128,27 @@ maybe_hot_frequency_p (int freq) return true; } +/* Return TRUE if frequency FREQ is considered to be hot. */ + +static inline bool +maybe_hot_count_p (gcov_type count) +{ + if (profile_status != 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)); +} + /* Return true in case BB can be CPU intensive and should be optimized for maximal performance. */ bool maybe_hot_bb_p (const_basic_block bb) { - if (profile_info && flag_branch_probabilities - && (bb->count - < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION))) - return false; - return maybe_hot_frequency_p (bb->frequency); + return maybe_hot_count_p (bb->count) || maybe_hot_frequency_p (bb->frequency); } /* Return true if the call can be hot. */ @@ -167,28 +178,7 @@ cgraph_maybe_hot_edge_p (struct cgraph_edge *edge) bool maybe_hot_edge_p (edge e) { - if (profile_info && flag_branch_probabilities - && (e->count - < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION))) - return false; - return maybe_hot_frequency_p (EDGE_FREQUENCY (e)); -} - -/* Return true in case BB is cold and should be optimized for size. */ - -bool -probably_cold_bb_p (const_basic_block bb) -{ - if (profile_info && flag_branch_probabilities - && (bb->count - < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION))) - return true; - if ((!profile_info || !flag_branch_probabilities) - && cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED) - return true; - if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)) - return true; - return false; + return maybe_hot_count_p (e->count) || maybe_hot_frequency_p (EDGE_FREQUENCY (e)); } /* Return true in case BB is probably never executed. */