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.
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);
{
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;
}
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;
}