aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2004-09-18 23:54:53 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2004-09-18 21:54:53 +0000
commit4d539f6875696be972076e00ff238acae97b4dcb (patch)
treea1454d32f30953d3df17ed9dde7a3701bf9b1dfc /gcc/tree-cfg.c
parent0eac5febe66effbc6fae3b6945e108fac736b4e6 (diff)
downloadgcc-4d539f6875696be972076e00ff238acae97b4dcb.zip
gcc-4d539f6875696be972076e00ff238acae97b4dcb.tar.gz
gcc-4d539f6875696be972076e00ff238acae97b4dcb.tar.bz2
* tree-cfg.c (thread_jumps): Fix updating of the profile.
From-SVN: r87709
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 69c8b25..37b5710 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3832,7 +3832,7 @@ static bool
thread_jumps (void)
{
edge e, next, last, old;
- basic_block bb, dest, tmp, old_dest, dom;
+ basic_block bb, dest, tmp, old_dest, curr, dom;
tree phi;
int arg;
bool retval = false;
@@ -3891,15 +3891,6 @@ thread_jumps (void)
break;
bb_ann (dest)->forwardable = 0;
- dest->frequency -= freq;
- if (dest->frequency < 0)
- dest->frequency = 0;
- dest->count -= count;
- if (dest->count < 0)
- dest->count = 0;
- dest->succ->count -= count;
- if (dest->succ->count < 0)
- dest->succ->count = 0;
}
/* Reset the forwardable marks to 1. */
@@ -3936,6 +3927,21 @@ thread_jumps (void)
old_dest = e->dest;
e = redirect_edge_and_branch (e, dest);
+ /* Update the profile. */
+ if (profile_status != PROFILE_ABSENT)
+ for (curr = old_dest; curr != dest; curr = curr->succ->dest)
+ {
+ curr->frequency -= freq;
+ if (curr->frequency < 0)
+ curr->frequency = 0;
+ curr->count -= count;
+ if (curr->count < 0)
+ curr->count = 0;
+ curr->succ->count -= count;
+ if (curr->succ->count < 0)
+ curr->succ->count = 0;
+ }
+
if (!old)
{
/* Update PHI nodes. We know that the new argument should