diff options
author | Jan Hubicka <jh@suse.cz> | 2003-02-12 15:23:20 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2003-02-12 14:23:20 +0000 |
commit | 6efcd26809361ac6110c0edb41f825cfe541734f (patch) | |
tree | bda6e75a96b50d6c889035fafb034251ff73c244 /gcc/predict.c | |
parent | 9083b5dab9ecdd3813d97800e9c7a2b3cc0736f9 (diff) | |
download | gcc-6efcd26809361ac6110c0edb41f825cfe541734f.zip gcc-6efcd26809361ac6110c0edb41f825cfe541734f.tar.gz gcc-6efcd26809361ac6110c0edb41f825cfe541734f.tar.bz2 |
* predict.c (estimate_probability): Fix roundoff error.
From-SVN: r62765
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 11 |
1 files changed, 8 insertions, 3 deletions
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); |