[pypy-svn] r21163 - pypy/dist/pypy/translator/backendopt

cfbolz at codespeak.net cfbolz at codespeak.net
Wed Dec 14 23:40:23 CET 2005


Author: cfbolz
Date: Wed Dec 14 23:40:21 2005
New Revision: 21163

Modified:
   pypy/dist/pypy/translator/backendopt/inline.py
Log:
make functions that are called exactly once more likely to get inlined.


Modified: pypy/dist/pypy/translator/backendopt/inline.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/inline.py	(original)
+++ pypy/dist/pypy/translator/backendopt/inline.py	Wed Dec 14 23:40:21 2005
@@ -320,10 +320,14 @@
         count += block_weight(block)
     return count
 
-def inlining_heuristic(graph):
+def inlining_heuristic(graph, callers=None, callees=None):
     # XXX ponderation factors?
+    factor = 1
+    if callers is not None:
+        if len(callers) == 1:
+            factor = 0.1
     return (0.9999 * measure_median_execution_cost(graph) +
-            static_instruction_count(graph))
+            static_instruction_count(graph)) * factor
 
 
 def static_callers(translator, ignore_primitives=False):
@@ -361,7 +365,7 @@
     while fiboheap:
         weight, graph = fiboheap[0]
         if not valid_weight.get(graph):
-            weight = inlining_heuristic(graph)
+            weight = inlining_heuristic(graph, callers.get(graph), callees.get(graph))
             #print '  + cost %7.2f %50s' % (weight, graph.name)
             heapreplace(fiboheap, (weight, graph))
             valid_weight[graph] = True



More information about the Pypy-commit mailing list