diff options
author | Paulo Matos <pmatos@broadcom.com> | 2013-10-21 15:41:46 +0000 |
---|---|---|
committer | Paulo Matos <pmatos@gcc.gnu.org> | 2013-10-21 17:41:46 +0200 |
commit | 0bff3610402612ce2d9c7bd136ee36fb4ab977b6 (patch) | |
tree | 2a9fd481e9c8fd018520bd4852cf18ab8bae6b08 | |
parent | b5c4ff7888a8fc17c0ce047f539548dacf2c8f8d (diff) | |
download | gcc-0bff3610402612ce2d9c7bd136ee36fb4ab977b6.zip gcc-0bff3610402612ce2d9c7bd136ee36fb4ab977b6.tar.gz gcc-0bff3610402612ce2d9c7bd136ee36fb4ab977b6.tar.bz2 |
ipa-inline.c (edge_badness): Cap edge->count at max_count for badness calculations.
* ipa-inline.c (edge_badness): Cap edge->count at max_count for badness
calculations.
From-SVN: r203897
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 14 |
2 files changed, 13 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 54298e4..06a31ad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-21 Paulo Matos <pmatos@broadcom.com> + + * ipa-inline.c (edge_badness): Cap edge->count at max_count for badness + calculations. + 2013-10-21 Jeff Law <law@redhat.com> * tree-ssa-threadedge.c (thread_through_normal_block): New argument VISITED. diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 4822c38..26c410b 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -903,12 +903,16 @@ edge_badness (struct cgraph_edge *edge, bool dump) { sreal tmp, relbenefit_real, growth_real; int relbenefit = relative_time_benefit (callee_info, edge, edge_time); + /* Capping edge->count to max_count. edge->count can be larger than + max_count if an inline adds new edges which increase max_count + after max_count is computed. */ + int edge_count = edge->count > max_count ? max_count : edge->count; sreal_init (&relbenefit_real, relbenefit, 0); sreal_init (&growth_real, growth, 0); /* relative_edge_count. */ - sreal_init (&tmp, edge->count, 0); + sreal_init (&tmp, edge_count, 0); sreal_div (&tmp, &tmp, &max_count_real); /* relative_time_benefit. */ @@ -921,16 +925,14 @@ edge_badness (struct cgraph_edge *edge, bool dump) badness = -1 * sreal_to_int (&tmp); - /* Be sure that insanity of the profile won't lead to increasing counts - in the scalling and thus to overflow in the computation above. */ - gcc_assert (max_count >= edge->count); if (dump) { fprintf (dump_file, - " %i (relative %f): profile info. Relative count %f" + " %i (relative %f): profile info. Relative count %f%s" " * Relative benefit %f\n", (int) badness, (double) badness / INT_MIN, - (double) edge->count / max_count, + (double) edge_count / max_count, + edge->count > max_count ? " (capped to max_count)" : "", relbenefit * 100.0 / RELATIVE_TIME_BENEFIT_RANGE); } } |