revert 172213 and add assertion

From-SVN: r172722
This commit is contained in:
Xinliang David Li 2011-04-19 16:48:40 +00:00 committed by Xinliang David Li
parent d708ce50e3
commit 444b39959c
2 changed files with 11 additions and 22 deletions

View 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
@ -1652,6 +1657,11 @@
* 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.

View 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)