Commit 1b08b734 by Dehao Chen Committed by Dehao Chen

ipa-inline.c (edge_badness): Fix integer underflow.

2013-08-28  Dehao Chen  <dehao@google.com>

	* ipa-inline.c (edge_badness): Fix integer underflow.

From-SVN: r202059
parent 48a3fa69
2013-08-28 Dehao Chen <dehao@google.com>
* ipa-inline.c (edge_badness): Fix integer underflow.
2013-08-28 Uros Bizjak <ubizjak@gmail.com> 2013-08-28 Uros Bizjak <ubizjak@gmail.com>
* gtm-builtins.def (_ITM_free): Declare leaf. * gtm-builtins.def (_ITM_free): Declare leaf.
......
...@@ -2972,7 +2972,7 @@ ipa-inline.o : ipa-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ ...@@ -2972,7 +2972,7 @@ ipa-inline.o : ipa-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(DIAGNOSTIC_H) $(FIBHEAP_H) $(PARAMS_H) $(TREE_PASS_H) \ $(DIAGNOSTIC_H) $(FIBHEAP_H) $(PARAMS_H) $(TREE_PASS_H) \
$(COVERAGE_H) $(GGC_H) $(TREE_FLOW_H) $(RTL_H) $(IPA_PROP_H) \ $(COVERAGE_H) $(GGC_H) $(TREE_FLOW_H) $(RTL_H) $(IPA_PROP_H) \
$(EXCEPT_H) $(GIMPLE_PRETTY_PRINT_H) $(IPA_INLINE_H) $(TARGET_H) \ $(EXCEPT_H) $(GIMPLE_PRETTY_PRINT_H) $(IPA_INLINE_H) $(TARGET_H) \
$(IPA_UTILS_H) $(IPA_UTILS_H) sreal.h
ipa-inline-analysis.o : ipa-inline-analysis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ ipa-inline-analysis.o : ipa-inline-analysis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h $(TREE_INLINE_H) $(FLAGS_H) $(CGRAPH_H) intl.h \ $(TREE_H) langhooks.h $(TREE_INLINE_H) $(FLAGS_H) $(CGRAPH_H) intl.h \
$(DIAGNOSTIC_H) $(PARAMS_H) $(TREE_PASS_H) $(CFGLOOP_H) \ $(DIAGNOSTIC_H) $(PARAMS_H) $(TREE_PASS_H) $(CFGLOOP_H) \
......
...@@ -113,10 +113,12 @@ along with GCC; see the file COPYING3. If not see ...@@ -113,10 +113,12 @@ along with GCC; see the file COPYING3. If not see
#include "target.h" #include "target.h"
#include "ipa-inline.h" #include "ipa-inline.h"
#include "ipa-utils.h" #include "ipa-utils.h"
#include "sreal.h"
/* Statistics we collect about inlining algorithm. */ /* Statistics we collect about inlining algorithm. */
static int overall_size; static int overall_size;
static gcov_type max_count; static gcov_type max_count;
static sreal max_count_real, max_relbenefit_real, half_int_min_real;
/* Return false when inlining edge E would lead to violating /* Return false when inlining edge E would lead to violating
limits on function unit growth or stack usage growth. limits on function unit growth or stack usage growth.
...@@ -891,12 +893,26 @@ edge_badness (struct cgraph_edge *edge, bool dump) ...@@ -891,12 +893,26 @@ edge_badness (struct cgraph_edge *edge, bool dump)
else if (max_count) else if (max_count)
{ {
sreal tmp, relbenefit_real, growth_real;
int relbenefit = relative_time_benefit (callee_info, edge, edge_time); int relbenefit = relative_time_benefit (callee_info, edge, edge_time);
badness =
((int) sreal_init(&relbenefit_real, relbenefit, 0);
((double) edge->count * INT_MIN / 2 / max_count / RELATIVE_TIME_BENEFIT_RANGE) * sreal_init(&growth_real, growth, 0);
relbenefit) / growth;
/* relative_edge_count. */
sreal_init (&tmp, edge->count, 0);
sreal_div (&tmp, &tmp, &max_count_real);
/* relative_time_benefit. */
sreal_mul (&tmp, &tmp, &relbenefit_real);
sreal_div (&tmp, &tmp, &max_relbenefit_real);
/* growth_f_caller. */
sreal_mul (&tmp, &tmp, &half_int_min_real);
sreal_div (&tmp, &tmp, &growth_real);
badness = -1 * sreal_to_int (&tmp);
/* Be sure that insanity of the profile won't lead to increasing counts /* Be sure that insanity of the profile won't lead to increasing counts
in the scalling and thus to overflow in the computation above. */ in the scalling and thus to overflow in the computation above. */
gcc_assert (max_count >= edge->count); gcc_assert (max_count >= edge->count);
...@@ -1542,6 +1558,9 @@ inline_small_functions (void) ...@@ -1542,6 +1558,9 @@ inline_small_functions (void)
if (max_count < edge->count) if (max_count < edge->count)
max_count = edge->count; max_count = edge->count;
} }
sreal_init (&max_count_real, max_count, 0);
sreal_init (&max_relbenefit_real, RELATIVE_TIME_BENEFIT_RANGE, 0);
sreal_init (&half_int_min_real, INT_MAX / 2, 0);
ipa_free_postorder_info (); ipa_free_postorder_info ();
initialize_growth_caches (); initialize_growth_caches ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment