aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2003-02-12 15:23:20 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2003-02-12 14:23:20 +0000
commit6efcd26809361ac6110c0edb41f825cfe541734f (patch)
treebda6e75a96b50d6c889035fafb034251ff73c244
parent9083b5dab9ecdd3813d97800e9c7a2b3cc0736f9 (diff)
downloadgcc-6efcd26809361ac6110c0edb41f825cfe541734f.zip
gcc-6efcd26809361ac6110c0edb41f825cfe541734f.tar.gz
gcc-6efcd26809361ac6110c0edb41f825cfe541734f.tar.bz2
* predict.c (estimate_probability): Fix roundoff error.
From-SVN: r62765
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/predict.c11
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b81e4c8..4597565 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Wed Feb 12 15:19:42 CET 2003 Jan Hubicka <jh@suse.cz>
+
+ * predict.c (estimate_probability): Fix roundoff error.
+
2003-02-12 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.md (a peephole2): Don't handle 65535.
diff --git a/gcc/predict.c b/gcc/predict.c
index b0170f3..a0fc75a 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -449,14 +449,19 @@ estimate_probability (loops_info)
if (simple_loop_p (loops_info, loop, &desc)
&& desc.const_iter)
{
+ int prob;
niter = desc.niter + 1;
if (niter == 0) /* We might overflow here. */
niter = desc.niter;
+ prob = (REG_BR_PROB_BASE
+ - (REG_BR_PROB_BASE + niter /2) / niter);
+ /* Branch prediction algorithm gives 0 frequency for everything
+ after the end of loop for loop having 0 probability to finish. */
+ if (prob == REG_BR_PROB_BASE)
+ prob = REG_BR_PROB_BASE - 1;
predict_edge (desc.in_edge, PRED_LOOP_ITERATIONS,
- REG_BR_PROB_BASE
- - (REG_BR_PROB_BASE + niter /2)
- / niter);
+ prob);
}
bbs = get_loop_body (loop);