aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2005-07-16 14:15:27 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2005-07-16 12:15:27 +0000
commit84fc24e8a0955d26e26f81f5a393fccf69156916 (patch)
treee40a6f3a4c3b50f937ebf086c49acc42fc0c325d
parent866c78db255daf2afb26f267a84469000ac89318 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfg.c10
-rw-r--r--gcc/predict.c2
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 25cc46d..de6bad9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2005-07-16 Jan Hubicka <jh@suse.cz>
+ * 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 <jh@suse.cz>
+
* profile.c (rest_of_handle_branch_prob): Fix handling of estimation
after RTL profiling.
diff --git a/gcc/cfg.c b/gcc/cfg.c
index 6aeb794..e6af6cf 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 305ada6..a448c04 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;