From eb7df8c27b7cde8094320759f43818e65c25c99c Mon Sep 17 00:00:00 2001 From: hubicka Date: Mon, 2 Jun 2008 16:36:49 +0000 Subject: [PATCH] * predict.c (maybe_hot_frequency_p): Break out of... (maybe_hot_bb_p): ... here. (maybe_hot_edge_p): New. * tree-ssa-coalesce.c (coalesce_cost_edge): Compute cost based on edge. * basic-block.h (maybe_hot_edge_p): Declare. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@136282 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/basic-block.h | 1 + gcc/predict.c | 38 +++++++++++++++++++++++++++++--------- gcc/tree-ssa-coalesce.c | 2 +- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0cc0223..d0235fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2008-05-26 Jan Hubicka + + * predict.c (maybe_hot_frequency_p): Break out of... + (maybe_hot_bb_p): ... here. + (maybe_hot_edge_p): New. + * tree-ssa-coalesce.c (coalesce_cost_edge): Compute cost based on edge. + * basic-block.h (maybe_hot_edge_p): Declare. + 2008-05-31 Uros Bizjak * config/i386/i386.md (*cmpfp_): Enable for optimize_size. diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 53e8a8b..17ec338 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -827,6 +827,7 @@ 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 tree_predicted_by_p (const_basic_block, enum br_predictor); diff --git a/gcc/predict.c b/gcc/predict.c index 4174333..42852dc 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -107,6 +107,22 @@ static const struct predictor_info predictor_info[]= { }; #undef DEF_PREDICTOR +/* Return TRUE if frequency FREQ is considered to be hot. */ +static bool +maybe_hot_frequency_p (int freq) +{ + if (!profile_info || !flag_branch_probabilities) + { + if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED) + return false; + if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT) + return true; + } + if (freq < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)) + return false; + return true; +} + /* Return true in case BB can be CPU intensive and should be optimized for maximal performance. */ @@ -117,16 +133,20 @@ maybe_hot_bb_p (const_basic_block bb) && (bb->count < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION))) return false; - if (!profile_info || !flag_branch_probabilities) - { - if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED) - return false; - if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT) - return true; - } - if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)) + return maybe_hot_frequency_p (bb->frequency); +} + +/* Return true in case BB can be CPU intensive and should be optimized + for maximal performance. */ + +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 true; + return maybe_hot_frequency_p (EDGE_FREQUENCY (e)); } /* Return true in case BB is cold and should be optimized for size. */ diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c index ef1ebca..172f1a2 100644 --- a/gcc/tree-ssa-coalesce.c +++ b/gcc/tree-ssa-coalesce.c @@ -114,7 +114,7 @@ coalesce_cost_edge (edge e) return MUST_COALESCE_COST; return coalesce_cost (EDGE_FREQUENCY (e), - maybe_hot_bb_p (e->src), + maybe_hot_edge_p (e), EDGE_CRITICAL_P (e)); } -- 2.7.4