re PR ipa/58862 (LTO profiledbootstrap failure: lto1: ICE in edge_badness, at ipa-inline.c:1008)

2013-10-29  Teresa Johnson  <tejohnson@google.com>

	PR ipa/58862
	* tree-ssa-tail-merge.c (replace_block_by): Tolerate profile
	insanities when updating probabilities.

From-SVN: r204178
This commit is contained in:
Teresa Johnson 2013-10-29 20:39:49 +00:00 committed by Teresa Johnson
parent 258125712b
commit b6c0035364
2 changed files with 17 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2013-10-29 Teresa Johnson <tejohnson@google.com>
PR ipa/58862
* tree-ssa-tail-merge.c (replace_block_by): Tolerate profile
insanities when updating probabilities.
2013-10-29 David Malcolm <dmalcolm@redhat.com>
* gdbhooks.py (CGraphNodePrinter.to_string): Update gdb

View File

@ -1467,7 +1467,7 @@ static void
replace_block_by (basic_block bb1, basic_block bb2)
{
edge pred_edge;
edge e1;
edge e1, e2;
edge_iterator ei;
unsigned int i;
gimple bb2_phi;
@ -1502,15 +1502,21 @@ replace_block_by (basic_block bb1, basic_block bb2)
bb2->count += bb1->count;
/* Merge the outgoing edge counts from bb1 onto bb2. */
gcov_type out_sum = 0;
FOR_EACH_EDGE (e1, ei, bb1->succs)
{
edge e2;
e2 = find_edge (bb2, e1->dest);
gcc_assert (e2);
e2->count += e1->count;
/* Recompute the probability from the new merged edge count (bb2->count
was updated above). */
e2->probability = GCOV_COMPUTE_SCALE (e2->count, bb2->count);
out_sum += e2->count;
}
/* Recompute the edge probabilities from the new merged edge count.
Use the sum of the new merged edge counts computed above instead
of bb2's merged count, in case there are profile count insanities
making the bb count inconsistent with the edge weights. */
FOR_EACH_EDGE (e2, ei, bb2->succs)
{
e2->probability = GCOV_COMPUTE_SCALE (e2->count, out_sum);
}
/* Do updates that use bb1, before deleting bb1. */