summaryrefslogtreecommitdiff
path: root/gcc/predict.c
diff options
context:
space:
mode:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-27 19:54:42 +0000
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-27 19:54:42 +0000
commit3f18719cda960d9d45c9343acb33e7d71ec8d689 (patch)
tree815da728ec01e62f4a77f8c3af52f31fbe745bd3 /gcc/predict.c
parent55e7bb5cc5290004556654cd1a4b310229835883 (diff)
downloadgcc-3f18719cda960d9d45c9343acb33e7d71ec8d689.tar.gz
* coverage.c (get_coverage_counts): Give a different message
if flag_guess_branch_prob is set. * predict.c (counts_to_freqs): Return an int. (estimate_bb_frequencies): If counts_to_freqs returns zero, calculate estimates. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76741 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/predict.c')
-rw-r--r--gcc/predict.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/predict.c b/gcc/predict.c
index f2b4068df1a..50580bd08ec 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -71,7 +71,7 @@ static void dump_prediction (enum br_predictor, int, basic_block, int);
static void estimate_loops_at_level (struct loop *loop);
static void propagate_freq (struct loop *);
static void estimate_bb_frequencies (struct loops *);
-static void counts_to_freqs (void);
+static int counts_to_freqs (void);
static void process_note_predictions (basic_block, int *);
static void process_note_prediction (basic_block, int *, int, int);
static bool last_basic_block_p (basic_block);
@@ -1048,19 +1048,22 @@ estimate_loops_at_level (struct loop *first_loop)
}
}
-/* Convert counts measured by profile driven feedback to frequencies. */
+/* Convert counts measured by profile driven feedback to frequencies.
+ Return nonzero iff there was any nonzero execution count. */
-static void
+static int
counts_to_freqs (void)
{
- gcov_type count_max = 1;
+ gcov_type count_max, true_count_max = 0;
basic_block bb;
FOR_EACH_BB (bb)
- count_max = MAX (bb->count, count_max);
+ true_count_max = MAX (bb->count, true_count_max);
+ count_max = MAX (true_count_max, 1);
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
bb->frequency = (bb->count * BB_FREQ_MAX + count_max / 2) / count_max;
+ return true_count_max;
}
/* Return true if function is likely to be expensive, so there is no point to
@@ -1113,9 +1116,7 @@ estimate_bb_frequencies (struct loops *loops)
basic_block bb;
sreal freq_max;
- if (flag_branch_probabilities)
- counts_to_freqs ();
- else
+ if (!flag_branch_probabilities || !counts_to_freqs ())
{
static int real_values_initialized = 0;