From 84fc24e8a0955d26e26f81f5a393fccf69156916 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sat, 16 Jul 2005 14:15:27 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/cfg.c | 10 +++++++++- gcc/predict.c | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25cc46d351d..de6bad93aff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-07-16 Jan Hubicka + + * cfg.c (update_bb_profile_for_threading): Fix profile updating. + (scale_bbs_frequencies_int): Watch roundoff errors. + * predict.c (return_prediction): Initialize return_stmt. + 2005-07-16 Jan Hubicka * profile.c (rest_of_handle_branch_prob): Fix handling of estimation 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; diff --git a/gcc/predict.c b/gcc/predict.c index 305ada6c4f2..a448c0449b8 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -1206,7 +1206,7 @@ return_prediction (tree val, enum prediction *prediction) static void apply_return_prediction (int *heads) { - tree return_stmt; + tree return_stmt = NULL; tree return_val; edge e; tree phi;