[pypy-svn] r63513 - pypy/branch/optimize-refactoring/pypy/jit/metainterp

fijal at codespeak.net fijal at codespeak.net
Thu Apr 2 04:08:48 CEST 2009


Author: fijal
Date: Thu Apr  2 04:08:46 2009
New Revision: 63513

Modified:
   pypy/branch/optimize-refactoring/pypy/jit/metainterp/compile.py
   pypy/branch/optimize-refactoring/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/optimize-refactoring/pypy/jit/metainterp/warmspot.py
Log:
make optimize a bit more flexible, by allowing custom optimize to be posted
into metainterp


Modified: pypy/branch/optimize-refactoring/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/optimize-refactoring/pypy/jit/metainterp/compile.py	(original)
+++ pypy/branch/optimize-refactoring/pypy/jit/metainterp/compile.py	Thu Apr  2 04:08:46 2009
@@ -6,8 +6,6 @@
 
 from pypy.jit.metainterp.resoperation import ResOperation, rop
 from pypy.jit.metainterp.history import TreeLoop, log, Box, History
-from pypy.jit.metainterp import optimize
-
 
 def compile_new_loop(metainterp, old_loops, greenkey):
     """Try to compile a new loop by closing the current history back
@@ -92,8 +90,8 @@
     loop.inputargs = history.inputargs
     loop.operations = history.operations
     loop.operations[-1].jump_target = loop
-    old_loop = optimize.optimize_loop(metainterp.options, old_loops,
-                                      loop, metainterp.cpu)
+    old_loop = metainterp.optimize_loop(metainterp.options, old_loops,
+                                        loop, metainterp.cpu)
     if old_loop is not None:
         return old_loop
     history.source_link = loop
@@ -138,8 +136,8 @@
     # it does not work -- i.e. none of the existing old_loops match.
     temploop = create_empty_loop(metainterp)
     temploop.operations = metainterp.history.operations
-    target_loop = optimize.optimize_bridge(metainterp.options, old_loops,
-                                           temploop, metainterp.cpu)
+    target_loop = metainterp.optimize_bridge(metainterp.options, old_loops,
+                                             temploop, metainterp.cpu)
     # Did it work?
     if target_loop is not None:
         # Yes, we managed to create just a bridge.  Attach the new operations

Modified: pypy/branch/optimize-refactoring/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/optimize-refactoring/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/optimize-refactoring/pypy/jit/metainterp/pyjitpl.py	Thu Apr  2 04:08:46 2009
@@ -13,7 +13,7 @@
 from pypy.jit.metainterp.resoperation import rop
 from pypy.jit.metainterp.heaptracker import (get_vtable_for_gcstruct,
                                              populate_type_cache)
-from pypy.jit.metainterp import codewriter, optimize, executor
+from pypy.jit.metainterp import codewriter, executor
 from pypy.rlib.rarithmetic import intmask
 from pypy.rlib.objectmodel import specialize
 
@@ -705,11 +705,14 @@
 
 # ____________________________________________________________
 
+class Optimizer(object):
+    pass
 
 class OOMetaInterp(object):
     num_green_args = 0
 
-    def __init__(self, portal_graph, graphs, cpu, stats, options):
+    def __init__(self, portal_graph, graphs, cpu, stats, options,
+                 optimizer=None):
         self.portal_graph = portal_graph
         self.cpu = cpu
         self.stats = stats
@@ -727,6 +730,13 @@
             self.cpu.class_sizes = None
         self._virtualizabledescs = {}
         self._debug_history = []
+        if optimizer is not None:
+            self.optimize_loop = optimizer.optimize_loop
+            self.optimize_bridge = optimizer.optimize_bridge
+        else:
+            from pypy.jit.metainterp import optimize
+            self.optimize_loop = optimize.optimize_loop
+            self.optimize_bridge = optimize.optimize_bridge
 
     def _recompute_class_sizes(self):
         if self.cpu.class_sizes is None:

Modified: pypy/branch/optimize-refactoring/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/optimize-refactoring/pypy/jit/metainterp/warmspot.py	(original)
+++ pypy/branch/optimize-refactoring/pypy/jit/metainterp/warmspot.py	Thu Apr  2 04:08:46 2009
@@ -113,7 +113,8 @@
         return True
 
     def build_meta_interp(self, CPUClass=runner.CPU, view="auto",
-                          translate_support_code=False, **kwds):
+                          translate_support_code=False, optimizer=None,
+                          **kwds):
         opt = Options(**kwds)
         self.stats = history.Stats()
         if translate_support_code:
@@ -139,7 +140,8 @@
         self.translator.graphs.append(graph)
         self.portal_graph = graph
         self.jitdriver = block.operations[pos].args[1].value
-        self.metainterp = OOMetaInterp(graph, graphs, cpu, self.stats, opt)
+        self.metainterp = OOMetaInterp(graph, graphs, cpu, self.stats, opt,
+                                       optimizer=optimizer)
 
     def make_enter_function(self):
         WarmEnterState = make_state_class(self)



More information about the Pypy-commit mailing list