aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2008-08-31 14:52:07 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2008-08-31 12:52:07 +0000
commitfb2fed03b680e2421f24ed33e3ab7dc8f03797cc (patch)
treeec47e89df6f23c1dc88cad878c8a9f76d8738fa1 /gcc
parent847535b6255a78ba618745d501b772ac95230359 (diff)
downloadgcc-fb2fed03b680e2421f24ed33e3ab7dc8f03797cc.zip
gcc-fb2fed03b680e2421f24ed33e3ab7dc8f03797cc.tar.gz
gcc-fb2fed03b680e2421f24ed33e3ab7dc8f03797cc.tar.bz2
postreload-gcse.c (eliminate_partially_redundant_loads): Use optimize_bb_for_size_p.
* 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. From-SVN: r139830
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/basic-block.h1
-rw-r--r--gcc/postreload-gcse.c2
-rw-r--r--gcc/predict.c46
4 files changed, 28 insertions, 30 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5690fc..b20e8b2 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 59a6f4a..9b759b0 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 884830a..57be7a5 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 e02f9f8..183ae8f 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. */