[pypy-svn] r70410 - in pypy/branch/jit-trace/pypy: jit/metainterp jit/metainterp/test module/pypyjit

arigo at codespeak.net arigo at codespeak.net
Mon Jan 4 22:22:55 CET 2010


Author: arigo
Date: Mon Jan  4 22:22:55 2010
New Revision: 70410

Modified:
   pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py
   pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py
   pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py
   pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py
Log:
Implement confirm_enter_jit() in interp_jit.py.


Modified: pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py	(original)
+++ pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py	Mon Jan  4 22:22:55 2010
@@ -386,7 +386,7 @@
         assert res == -1
 
     def test_confirm_enter_jit(self):
-        def confirm_enter_jit(x):
+        def confirm_enter_jit(x, y):
             return x <= 5
         myjitdriver = JitDriver(greens = ['x'], reds = ['y'],
                                 confirm_enter_jit = confirm_enter_jit)

Modified: pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py	(original)
+++ pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py	Mon Jan  4 22:22:55 2010
@@ -403,10 +403,12 @@
         self.get_printable_location_ptr = self._make_hook_graph(
             annhelper, self.jitdriver.get_printable_location, s_Str)
         self.confirm_enter_jit_ptr = self._make_hook_graph(
-            annhelper, self.jitdriver.confirm_enter_jit, annmodel.s_Bool)
+            annhelper, self.jitdriver.confirm_enter_jit, annmodel.s_Bool,
+            onlygreens=False)
         annhelper.finish()
 
-    def _make_hook_graph(self, annhelper, func, s_result, s_first_arg=None):
+    def _make_hook_graph(self, annhelper, func, s_result, s_first_arg=None,
+                         onlygreens=True):
         if func is None:
             return None
         #
@@ -414,7 +416,9 @@
         if s_first_arg is not None:
             extra_args_s.append(s_first_arg)
         #
-        args_s = self.portal_args_s[:len(self.green_args_spec)]
+        args_s = self.portal_args_s
+        if onlygreens:
+            args_s = args_s[:len(self.green_args_spec)]
         graph = annhelper.getgraph(func, extra_args_s + args_s, s_result)
         funcptr = annhelper.graph2delayed(graph)
         return funcptr

Modified: pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py
==============================================================================
--- pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py	(original)
+++ pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py	Mon Jan  4 22:22:55 2010
@@ -228,7 +228,7 @@
                     cell.counter = n
                     return
                 # bound reached; start tracing
-                if not confirm_enter_jit(*greenargs):
+                if not confirm_enter_jit(*args):
                     cell.counter = 0
                     return
                 from pypy.jit.metainterp.pyjitpl import MetaInterp
@@ -241,7 +241,7 @@
                     self.disable_noninlinable_function(metainterp)
                     raise
             else:
-                if not confirm_enter_jit(*greenargs):
+                if not confirm_enter_jit(*args):
                     return
                 # machine code was already compiled for these greenargs
                 # get the assembler and fill in the boxes
@@ -491,13 +491,13 @@
         #
         confirm_enter_jit_ptr = self.warmrunnerdesc.confirm_enter_jit_ptr
         if confirm_enter_jit_ptr is None:
-            def confirm_enter_jit(*greenargs):
+            def confirm_enter_jit(*args):
                 return True
         else:
             rtyper = self.warmrunnerdesc.rtyper
             #
-            def confirm_enter_jit(*greenargs):
+            def confirm_enter_jit(*args):
                 fn = support.maybe_on_top_of_llinterp(rtyper,
                                                       confirm_enter_jit_ptr)
-                return fn(*greenargs)
+                return fn(*args)
         self.confirm_enter_jit = confirm_enter_jit

Modified: pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py
==============================================================================
--- pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py	(original)
+++ pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py	Mon Jan  4 22:22:55 2010
@@ -41,6 +41,11 @@
 def set_jitcell_at(newcell, next_instr, bytecode):
     bytecode.jit_cells[next_instr] = newcell
 
+def confirm_enter_jit(next_instr, bytecode, frame, ec):
+    return (frame.w_f_trace is None and
+            ec.profilefunc is None and
+            ec.w_tracefunc is None)
+
 
 class PyPyJitDriver(JitDriver):
     reds = ['frame', 'ec']
@@ -58,7 +63,8 @@
 pypyjitdriver = PyPyJitDriver(can_inline = can_inline,
                               get_printable_location = get_printable_location,
                               get_jitcell_at = get_jitcell_at,
-                              set_jitcell_at = set_jitcell_at)
+                              set_jitcell_at = set_jitcell_at,
+                              confirm_enter_jit = confirm_enter_jit)
 
 class __extend__(PyFrame):
 



More information about the Pypy-commit mailing list