summaryrefslogtreecommitdiff
path: root/gcc/cfg.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-16 12:15:27 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-16 12:15:27 +0000
commit72ab4a9478ca136861d03f875c311c212c154794 (patch)
treee40a6f3a4c3b50f937ebf086c49acc42fc0c325d /gcc/cfg.c
parenta3ae73d8ea709412391f8c417e4ca811ec25b33f (diff)
downloadgcc-72ab4a9478ca136861d03f875c311c212c154794.tar.gz
* cfg.c (update_bb_profile_for_threading): Fix profile updating.
(scale_bbs_frequencies_int): Watch roundoff errors. * predict.c (return_prediction): Initialize return_stmt. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102087 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfg.c')
-rw-r--r--gcc/cfg.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/cfg.c b/gcc/cfg.c
index 6aeb79417f9..e6af6cfbaff 100644
--- a/gcc/cfg.c
+++ b/gcc/cfg.c
@@ -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;