aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-cp.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2011-07-26 12:26:58 +0000
committerMartin Jambor <mjambor@suse.cz>2011-07-26 12:26:58 +0000
commit41284600771edf6a7dccf6080e1c582061a94735 (patch)
treef7aeaf09ac7ea815eff0a6aa785f1f2074639a55 /gcc/ipa-cp.c
parent5842c2ff3ed0156e96c84af16cdd5e26ed43d274 (diff)
2011-07-26 Martin Jambor <mjambor@suse.cz>
PR bootstrap/49786 * ipa-cp.c (update_profiling_info): Avoid overflow when updating counts. (update_specialized_profile): Likewise. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@176789 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-cp.c')
-rw-r--r--gcc/ipa-cp.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index dc8cf095f6e..94118b7b1a5 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -1877,7 +1877,6 @@ dump_profile_updates (struct cgraph_node *orig_node,
cgraph_node_name (cs->callee), (HOST_WIDE_INT) cs->count);
}
-
/* After a specialized NEW_NODE version of ORIG_NODE has been created, update
their profile information to reflect this. */
@@ -1923,12 +1922,14 @@ update_profiling_info (struct cgraph_node *orig_node,
for (cs = new_node->callees; cs ; cs = cs->next_callee)
if (cs->frequency)
- cs->count = cs->count * new_sum / orig_node_count;
+ cs->count = cs->count * (new_sum * REG_BR_PROB_BASE
+ / orig_node_count) / REG_BR_PROB_BASE;
else
cs->count = 0;
for (cs = orig_node->callees; cs ; cs = cs->next_callee)
- cs->count = cs->count * remainder / orig_node_count;
+ cs->count = cs->count * (remainder * REG_BR_PROB_BASE
+ / orig_node_count) / REG_BR_PROB_BASE;
if (dump_file)
dump_profile_updates (orig_node, new_node);
@@ -1966,7 +1967,8 @@ update_specialized_profile (struct cgraph_node *new_node,
for (cs = orig_node->callees; cs ; cs = cs->next_callee)
{
- gcov_type dec = cs->count * redirected_sum / orig_node_count;
+ gcov_type dec = cs->count * (redirected_sum * REG_BR_PROB_BASE
+ / orig_node_count) / REG_BR_PROB_BASE;
if (dec < cs->count)
cs->count -= dec;
else