false);
new_sum = stats.count_sum;
+ bool orig_edges_processed = false;
if (new_sum > orig_node_count)
{
- /* TODO: Perhaps this should be gcc_unreachable ()? */
- remainder = profile_count::zero ().guessed_local ();
+ /* TODO: Profile has alreay gone astray, keep what we have but lower it
+ to global0 category. */
+ remainder = orig_node->count.global0 ();
+
+ for (cgraph_edge *cs = orig_node->callees; cs; cs = cs->next_callee)
+ cs->count = cs->count.global0 ();
+ for (cgraph_edge *cs = orig_node->indirect_calls;
+ cs;
+ cs = cs->next_callee)
+ cs->count = cs->count.global0 ();
+ orig_edges_processed = true;
}
else if (stats.rec_count_sum.nonzero_p ())
{
for (cgraph_edge *cs = new_node->indirect_calls; cs; cs = cs->next_callee)
cs->count = cs->count.apply_scale (new_sum, orig_new_node_count);
- profile_count::adjust_for_ipa_scaling (&remainder, &orig_node_count);
- for (cgraph_edge *cs = orig_node->callees; cs; cs = cs->next_callee)
- cs->count = cs->count.apply_scale (remainder, orig_node_count);
- for (cgraph_edge *cs = orig_node->indirect_calls; cs; cs = cs->next_callee)
- cs->count = cs->count.apply_scale (remainder, orig_node_count);
+ if (!orig_edges_processed)
+ {
+ profile_count::adjust_for_ipa_scaling (&remainder, &orig_node_count);
+ for (cgraph_edge *cs = orig_node->callees; cs; cs = cs->next_callee)
+ cs->count = cs->count.apply_scale (remainder, orig_node_count);
+ for (cgraph_edge *cs = orig_node->indirect_calls;
+ cs;
+ cs = cs->next_callee)
+ cs->count = cs->count.apply_scale (remainder, orig_node_count);
+ }
if (dump_file)
{