diff options
author | Jan Hubicka <jh@suse.cz> | 2005-07-16 14:15:27 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2005-07-16 12:15:27 +0000 |
commit | 84fc24e8a0955d26e26f81f5a393fccf69156916 (patch) | |
tree | e40a6f3a4c3b50f937ebf086c49acc42fc0c325d /gcc/cfg.c | |
parent | 866c78db255daf2afb26f267a84469000ac89318 (diff) | |
download | gcc-84fc24e8a0955d26e26f81f5a393fccf69156916.zip gcc-84fc24e8a0955d26e26f81f5a393fccf69156916.tar.gz gcc-84fc24e8a0955d26e26f81f5a393fccf69156916.tar.bz2 |
cfg.c (update_bb_profile_for_threading): Fix profile updating.
* cfg.c (update_bb_profile_for_threading): Fix profile updating.
(scale_bbs_frequencies_int): Watch roundoff errors.
* predict.c (return_prediction): Initialize return_stmt.
From-SVN: r102087
Diffstat (limited to 'gcc/cfg.c')
-rw-r--r-- | gcc/cfg.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -896,7 +896,11 @@ update_bb_profile_for_threading (basic_block bb, int edge_frequency, int scale = 65536 * REG_BR_PROB_BASE / prob; FOR_EACH_EDGE (c, ei, bb->succs) - c->probability = (c->probability * scale) / 65536; + { + c->probability = (c->probability * scale) / 65536; + if (c->probability > REG_BR_PROB_BASE) + c->probability = REG_BR_PROB_BASE; + } } gcc_assert (bb == taken_edge->src); @@ -917,6 +921,10 @@ scale_bbs_frequencies_int (basic_block *bbs, int nbbs, int num, int den) { int i; edge e; + if (num < 0) + num = 0; + if (num > den) + return; for (i = 0; i < nbbs; i++) { edge_iterator ei; |