profile_count redirected_sum)
{
struct cgraph_edge *cs;
- profile_count new_node_count, orig_node_count = orig_node->count;
+ profile_count new_node_count, orig_node_count = orig_node->count.ipa ();
if (dump_file)
{
fprintf (dump_file, " the sum of counts of redirected edges is ");
redirected_sum.dump (dump_file);
+ fprintf (dump_file, "\n old ipa count of the original node is ");
+ orig_node_count.dump (dump_file);
fprintf (dump_file, "\n");
}
if (!(orig_node_count > profile_count::zero ()))
return;
- gcc_assert (orig_node_count >= redirected_sum);
-
new_node_count = new_node->count;
new_node->count += redirected_sum;
- orig_node->count -= redirected_sum;
+ orig_node->count
+ = lenient_count_portion_handling (orig_node->count - redirected_sum,
+ orig_node);
for (cs = new_node->callees; cs; cs = cs->next_callee)
cs->count += cs->count.apply_scale (redirected_sum, new_node_count);