Hi,
this patch fixes two rather embarassing typos that together caused that benefits
are pretty much ignored by the inliner heuristics.
Also to make benefits go right for large function I remived caping logic
in do_estimate_edge_time.  It is no longer needed since we no longe propagate
the values.

Bootstrapped/regtested x86_64-linux, will commit it shortly.

Honza
        * ipa-inline.c (relative_time_benefit): Fix wrong bracketting.
        * ipa-inline.h (estimate_edge_time): Fix pasto.
        * ipa-inline-analysis.c (do_estiamte_edge_time): Remove capping.
Index: ipa-inline.c
===================================================================
--- ipa-inline.c        (revision 179003)
+++ ipa-inline.c        (working copy)
@@ -710,9 +710,8 @@ relative_time_benefit (struct inline_sum
   uninlined_call_time =
     ((gcov_type)
      (callee_info->time
-      + inline_edge_summary (edge)->call_stmt_time
-      + CGRAPH_FREQ_BASE / 2) * edge->frequency
-     / CGRAPH_FREQ_BASE);
+      + inline_edge_summary (edge)->call_stmt_time) * edge->frequency
+     + CGRAPH_FREQ_BASE / 2) / CGRAPH_FREQ_BASE;
   /* Compute relative time benefit, i.e. how much the call becomes faster.
      ??? perhaps computing how much the caller+calle together become faster
      would lead to more realistic results.  */
Index: ipa-inline.h
===================================================================
--- ipa-inline.h        (revision 179003)
+++ ipa-inline.h        (working copy)
@@ -219,7 +219,7 @@ estimate_edge_time (struct cgraph_edge *
   if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache) <= edge->uid
       || !(ret = VEC_index (edge_growth_cache_entry,
                            edge_growth_cache,
-                           edge->uid)->size))
+                           edge->uid)->time))
     return do_estimate_edge_time (edge);
   return ret - (ret > 0);
 }
Index: ipa-inline-analysis.c
===================================================================
--- ipa-inline-analysis.c       (revision 179046)
+++ ipa-inline-analysis.c       (working copy)
@@ -2164,10 +2201,9 @@ do_estimate_edge_time (struct cgraph_edg
                               evaluate_conditions_for_edge (edge, true),
                               &size, &time);
 
-  ret = (((gcov_type)time - es->call_stmt_time) * edge->frequency
+  ret = (((gcov_type)time
+          - es->call_stmt_time) * edge->frequency
         + CGRAPH_FREQ_BASE / 2) / CGRAPH_FREQ_BASE;
-  if (ret > MAX_TIME)
-    ret = MAX_TIME;
 
   /* When caching, update the cache entry.  */
   if (edge_growth_cache)

Reply via email to