diff options
author | Jan Hubicka <jh@suse.cz> | 2004-09-18 23:54:53 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2004-09-18 21:54:53 +0000 |
commit | 4d539f6875696be972076e00ff238acae97b4dcb (patch) | |
tree | a1454d32f30953d3df17ed9dde7a3701bf9b1dfc /gcc/tree-cfg.c | |
parent | 0eac5febe66effbc6fae3b6945e108fac736b4e6 (diff) | |
download | gcc-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.c | 26 |
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 |