diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cfg.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa-phiopt.c | 4 |
3 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 87e59aa..d022466 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2005-06-25 Jan Hubicka <jh@suse.cz> + * tree-ssa-phiopt.c (replace_phi_edge_with_variable): Update profile. + * cfg.c (update_bb_profile_for_threading): Fix rescaling. + * passes.c (rest_of_handle_branch_prob): Do not rebuild profiling info when not neecesary (rest_of_compilation): Fix conditional on branch prob pass. @@ -901,7 +901,7 @@ 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 *= scale / 65536; + c->probability = (c->probability * scale) / 65536; } gcc_assert (bb == taken_edge->src); diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index f72cb1b..e7d048f 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -331,6 +331,8 @@ replace_phi_edge_with_variable (basic_block cond_block, { EDGE_SUCC (cond_block, 0)->flags |= EDGE_FALLTHRU; EDGE_SUCC (cond_block, 0)->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE); + EDGE_SUCC (cond_block, 0)->probability = REG_BR_PROB_BASE; + EDGE_SUCC (cond_block, 0)->count += EDGE_SUCC (cond_block, 1)->count; block_to_remove = EDGE_SUCC (cond_block, 1)->dest; } @@ -339,6 +341,8 @@ replace_phi_edge_with_variable (basic_block cond_block, EDGE_SUCC (cond_block, 1)->flags |= EDGE_FALLTHRU; EDGE_SUCC (cond_block, 1)->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE); + EDGE_SUCC (cond_block, 1)->probability = REG_BR_PROB_BASE; + EDGE_SUCC (cond_block, 1)->count += EDGE_SUCC (cond_block, 0)->count; block_to_remove = EDGE_SUCC (cond_block, 0)->dest; } |