revert 172213 and add assertion
authorXinliang David Li <davidxl@google.com>
Tue, 19 Apr 2011 16:48:40 +0000 (16:48 +0000)
committerXinliang David Li <davidxl@gcc.gnu.org>
Tue, 19 Apr 2011 16:48:40 +0000 (16:48 +0000)
From-SVN: r172722

gcc/ChangeLog
gcc/ipa-cp.c

index 959d07b80084e2ae9a5ce9e69370fa5eca27ca57..9956f1aa0267d1311fa0d914b1ba094019154cd3 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-19  Xinliang David Li  <davidxl@google.com>
+       
+       * ipa-cp.c (ipcp_update_profiling): asserting
+       scale_completement is not negative.
+
 2011-04-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/48678
        * ipa-cp.c (ipcp_update_profiling): Correct negative scale factor due
        to insane profile data.
 
+2011-04-08  Xinliang David Li  <davidxl@google.com>
+
+       * ipa-cp.c (ipcp_update_profiling): Correct
+        negative scale factor due to insane profile data.
+
 2011-04-08  Xinliang David Li  <davidxl@google.com>
 
        * final.c (dump_basic_block_info): New function.
index 270e58a95d5a916f0eeec5bef3fb6668a2f67e84..261d0741261f0689e945c86462505b7804fb5de9 100644 (file)
@@ -1115,28 +1115,7 @@ ipcp_update_profiling (void)
          node->count = orig_node->count * scale / REG_BR_PROB_BASE;
          scale_complement = REG_BR_PROB_BASE - scale;
 
-          /* Negative scale complement can result from insane profile data
-             in which the total incoming edge counts in this module is
-             larger than the callee's entry count. The insane profile data
-             usually gets generated due to the following reasons:
-
-             1) in multithreaded programs, when profile data is dumped
-             to gcda files in gcov_exit, some other threads are still running.
-             The profile counters are dumped in bottom up order (call graph).
-             The caller's BB counters may still be updated while the callee's
-             counter data is already saved to disk.
-
-             2) Comdat functions: comdat functions' profile data are not
-             allocated in comdat. When a comdat callee function gets inlined
-             at some callsites after instrumentation, and the remaining calls
-             to this function resolves to a comdat copy in another module,
-             the profile counters for this function are split. This can
-             result in sum of incoming edge counts from this module being
-             larger than callee instance's entry count.  */
-
-          if (scale_complement < 0 && flag_profile_correction)
-            scale_complement = 0;
-
+         gcc_assert (scale_complement >= 0);
          orig_node->count =
            orig_node->count * scale_complement / REG_BR_PROB_BASE;
          for (cs = node->callees; cs; cs = cs->next_callee)