aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2008-06-02 18:36:49 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2008-06-02 16:36:49 +0000
commit3250d724898f2c4af583d67ba86c34193ba86a89 (patch)
tree9966e2434cb3b536d44ef7b732d765660efcb506 /gcc
parent79711d26dbc325abf22d935cc248bcd59a06eb21 (diff)
downloadgcc-3250d724898f2c4af583d67ba86c34193ba86a89.zip
gcc-3250d724898f2c4af583d67ba86c34193ba86a89.tar.gz
gcc-3250d724898f2c4af583d67ba86c34193ba86a89.tar.bz2
predict.c (maybe_hot_frequency_p): Break out of...
* 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. From-SVN: r136282
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/basic-block.h1
-rw-r--r--gcc/predict.c38
-rw-r--r--gcc/tree-ssa-coalesce.c2
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 <jh@suse.cz>
+
+ * 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 <ubizjak@gmail.com>
* config/i386/i386.md (*cmpfp_<mode>): 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));
}