diff options
author | jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-26 12:26:58 +0000 |
---|---|---|
committer | jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-26 12:26:58 +0000 |
commit | 7b9dcf83e561d62d383c4c63aa57c309c5bc7d0e (patch) | |
tree | f7aeaf09ac7ea815eff0a6aa785f1f2074639a55 /gcc/ipa-cp.c | |
parent | 231a53101d722b194a90a845f5eef62e11c1df5d (diff) | |
download | gcc-7b9dcf83e561d62d383c4c63aa57c309c5bc7d0e.tar.gz |
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: svn+ssh://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.c | 10 |
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 |