* ipa-cp.c (update_profiling_info): Fix scaling.
authorJan Hubicka <hubicka@ucw.cz>
Thu, 28 Nov 2019 14:16:29 +0000 (15:16 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 28 Nov 2019 14:16:29 +0000 (14:16 +0000)
From-SVN: r278808

gcc/ChangeLog
gcc/ipa-cp.c

index fe76b3e2b4a9c7601f2e80cc04ac8b6ffa01abe0..9897c0e604e2420e1d9c6e602b5e25248bc1e099 100644 (file)
@@ -1,3 +1,7 @@
+2019-11-28  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa-cp.c (update_profiling_info): Fix scaling.
+
 2019-11-28  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/92645
index 31a98a3d98ab729034d6f89775d87087a0794739..b13322827b685dc41b64ce58b8349d22f0ea7481 100644 (file)
@@ -4091,6 +4091,7 @@ update_profiling_info (struct cgraph_node *orig_node,
   struct caller_statistics stats;
   profile_count new_sum, orig_sum;
   profile_count remainder, orig_node_count = orig_node->count;
+  profile_count orig_new_node_count = new_node->count;
 
   if (!(orig_node_count.ipa () > profile_count::zero ()))
     return;
@@ -4128,15 +4129,20 @@ update_profiling_info (struct cgraph_node *orig_node,
   remainder = orig_node_count.combine_with_ipa_count (orig_node_count.ipa ()
                                                      - new_sum.ipa ());
   new_sum = orig_node_count.combine_with_ipa_count (new_sum);
+  new_node->count = new_sum;
   orig_node->count = remainder;
 
-  profile_count::adjust_for_ipa_scaling (&new_sum, &orig_node_count);
+  profile_count::adjust_for_ipa_scaling (&new_sum, &orig_new_node_count);
   for (cs = new_node->callees; cs; cs = cs->next_callee)
-    cs->count = cs->count.apply_scale (new_sum, orig_node_count);
+    cs->count = cs->count.apply_scale (new_sum, orig_new_node_count);
+  for (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 (cs = orig_node->callees; cs; cs = cs->next_callee)
     cs->count = cs->count.apply_scale (remainder, orig_node_count);
+  for (cs = orig_node->indirect_calls; cs; cs = cs->next_callee)
+    cs->count = cs->count.apply_scale (remainder, orig_node_count);
 
   if (dump_file)
     dump_profile_updates (orig_node, new_node);