summaryrefslogtreecommitdiff
path: root/gcc/ipa-inline.c
diff options
context:
space:
mode:
authorpmatos <pmatos@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-21 15:41:46 +0000
committerpmatos <pmatos@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-21 15:41:46 +0000
commit3d51c482a27ab8a777d3234135db6e342cc10158 (patch)
tree2a9fd481e9c8fd018520bd4852cf18ab8bae6b08 /gcc/ipa-inline.c
parent4bc0f16ebd21b15d624ebbf8efa88c9c2f1df367 (diff)
downloadgcc-3d51c482a27ab8a777d3234135db6e342cc10158.tar.gz
* ipa-inline.c (edge_badness): Cap edge->count at max_count for badness
calculations. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203897 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r--gcc/ipa-inline.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 4822c38ca58..26c410ba39c 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);
}
}