aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-cp.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2017-11-17 18:41:10 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2017-11-17 17:41:10 +0000
commit35cd23ebb6d05e1325bd165679be44192f51ba05 (patch)
tree32b8e14f5ff1f5c5cd92e3e8003cc598ed02cc51 /gcc/ipa-cp.c
parent6566b0fb86addb5c28d3ff8b2631f7f9516d4054 (diff)
downloadgcc-35cd23ebb6d05e1325bd165679be44192f51ba05.zip
gcc-35cd23ebb6d05e1325bd165679be44192f51ba05.tar.gz
gcc-35cd23ebb6d05e1325bd165679be44192f51ba05.tar.bz2
ipa-cp.c (update_profiling_info): Handle conversion to local profile.
* ipa-cp.c (update_profiling_info): Handle conversion to local profile. * tree-cfg.c (execute_fixup_cfg): Do fixup same way as inliner does. From-SVN: r254885
Diffstat (limited to 'gcc/ipa-cp.c')
-rw-r--r--gcc/ipa-cp.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index bc1e3ae..4421abf 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -3695,16 +3695,22 @@ update_profiling_info (struct cgraph_node *orig_node,
}
}
- new_node->count = new_sum;
- remainder = orig_node_count - new_sum;
+ if (!new_sum.nonzero_p ())
+ {
+ new_sum = new_sum.global0 ();
+ new_node->count = new_sum;
+ remainder = orig_node->count;
+ }
+ else
+ {
+ remainder = orig_node_count - new_sum;
+ if (!remainder.nonzero_p ())
+ remainder = orig_node_count.global0 ();
+ }
orig_node->count = remainder;
for (cs = new_node->callees; cs; cs = cs->next_callee)
- /* FIXME: why we care about non-zero frequency here? */
- if (cs->frequency ())
- cs->count = cs->count.apply_scale (new_sum, orig_node_count);
- else
- cs->count = profile_count::zero ();
+ cs->count = cs->count.apply_scale (new_sum, orig_node_count);
for (cs = orig_node->callees; cs; cs = cs->next_callee)
cs->count = cs->count.apply_scale (remainder, orig_node_count);