Author: Maciej Fijalkowski <[email protected]>
Branch: jit-applevel-hook
Changeset: r44513:a4862ff67f66
Date: 2011-05-26 14:59 +0200
http://bitbucket.org/pypy/pypy/changeset/a4862ff67f66/

Log:    pass logger around and a bit of fun with RPython

diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -154,7 +154,8 @@
     old_loop_tokens.append(loop_token)
 
 def send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, type):
-    jitdriver_sd.on_compile(loop.token, loop.operations, type, greenkey)
+    jitdriver_sd.on_compile(metainterp_sd.logger_ops, loop.token,
+                            loop.operations, type, greenkey)
     globaldata = metainterp_sd.globaldata
     loop_token = loop.token
     loop_token.number = n = globaldata.loopnumbering
@@ -193,7 +194,8 @@
 def send_bridge_to_backend(jitdriver_sd, metainterp_sd, faildescr, inputargs,
                            operations, original_loop_token):
     n = metainterp_sd.cpu.get_fail_descr_number(faildescr)
-    jitdriver_sd.on_compile_bridge(original_loop_token, operations, n)
+    jitdriver_sd.on_compile_bridge(metainterp_sd.logger_ops,
+                                   original_loop_token, operations, n)
     if not we_are_translated():
         show_loop(metainterp_sd)
         TreeLoop.check_consistency_of(inputargs, operations)
diff --git a/pypy/jit/metainterp/test/test_jitdriver.py 
b/pypy/jit/metainterp/test/test_jitdriver.py
--- a/pypy/jit/metainterp/test/test_jitdriver.py
+++ b/pypy/jit/metainterp/test/test_jitdriver.py
@@ -15,7 +15,7 @@
         called = {}
         
         class MyJitDriver(JitDriver):
-            def on_compile(self, looptoken, operations, type, n, m):
+            def on_compile(self, logger, looptoken, operations, type, n, m):
                 called[(m, n, type)] = looptoken
 
         driver = MyJitDriver(greens = ['n', 'm'], reds = ['i'])
@@ -37,9 +37,9 @@
         called = {}
         
         class MyJitDriver(JitDriver):
-            def on_compile(self, looptoken, operations, type, n, m):
+            def on_compile(self, logger, looptoken, operations, type, n, m):
                 called[(m, n, type)] = loop
-            def on_compile_bridge(self, orig_token, operations, n):
+            def on_compile_bridge(self, logger, orig_token, operations, n):
                 assert 'bridge' not in called
                 called['bridge'] = orig_token
 
diff --git a/pypy/jit/metainterp/warmstate.py b/pypy/jit/metainterp/warmstate.py
--- a/pypy/jit/metainterp/warmstate.py
+++ b/pypy/jit/metainterp/warmstate.py
@@ -566,11 +566,13 @@
             return can_inline_greenargs(*greenargs)
         self.can_inline_greenargs = can_inline_greenargs
         self.can_inline_callable = can_inline_callable
-        def on_compile(token, operations, type, greenkey):
+        def on_compile(logger, token, operations, type, greenkey):
             greenargs = unwrap_greenkey(greenkey)
-            return jd.jitdriver.on_compile(token, operations, type, *greenargs)
-        def on_compile_bridge(orig_token, operations, n):
-            return jd.jitdriver.on_compile_bridge(orig_token, operations, n)
+            return jd.jitdriver.on_compile(logger, token, operations, type,
+                                           *greenargs)
+        def on_compile_bridge(logger, orig_token, operations, n):
+            return jd.jitdriver.on_compile_bridge(logger, orig_token,
+                                                  operations, n)
         jd.on_compile = on_compile
         jd.on_compile_bridge = on_compile_bridge
 
diff --git a/pypy/module/pypyjit/interp_jit.py 
b/pypy/module/pypyjit/interp_jit.py
--- a/pypy/module/pypyjit/interp_jit.py
+++ b/pypy/module/pypyjit/interp_jit.py
@@ -51,7 +51,7 @@
     greens = ['next_instr', 'is_being_profiled', 'pycode']
     virtualizables = ['frame']
 
-    def on_compile(self, looptoken, operations, type, next_instr,
+    def on_compile(self, logger, looptoken, operations, type, next_instr,
                    is_being_profiled, ll_pycode):
         from pypy.rpython.annlowlevel import cast_base_ptr_to_instance
         
@@ -61,7 +61,7 @@
             pycode = cast_base_ptr_to_instance(PyCode, ll_pycode)
             space.call_function(cache.w_compile_hook, pycode)
 
-    def on_compile_bridge(self, orig_looptoken, operations, n):
+    def on_compile_bridge(self, logger, orig_looptoken, operations, n):
         pass
 
 pypyjitdriver = PyPyJitDriver(get_printable_location = get_printable_location,
diff --git a/pypy/module/pypyjit/test/test_jit_hook.py 
b/pypy/module/pypyjit/test/test_jit_hook.py
--- a/pypy/module/pypyjit/test/test_jit_hook.py
+++ b/pypy/module/pypyjit/test/test_jit_hook.py
@@ -4,9 +4,16 @@
 from pypy.interpreter.gateway import interp2app
 from pypy.jit.metainterp.history import LoopToken
 from pypy.jit.metainterp.resoperation import ResOperation, rop
+from pypy.jit.metainterp.logger import Logger
 from pypy.rpython.annlowlevel import (cast_instance_to_base_ptr,
                                       cast_base_ptr_to_instance)
 from pypy.module.pypyjit.interp_jit import pypyjitdriver
+from pypy.jit.tool.oparser import parse
+from pypy.jit.metainterp.typesystem import llhelper
+
+class MockSD(object):
+    class cpu:
+        ts = llhelper
 
 class AppTestJitHook(object):
     def setup_class(cls):
@@ -18,15 +25,20 @@
         return f
         """)
         ll_code = cast_instance_to_base_ptr(w_f.code)
+        logger = Logger(MockSD())
 
-        oplist = []
+        oplist = parse("""
+        [i1, i2]
+        i3 = int_add(i1, i2)
+        guard_true(i3) []
+        """)
 
         def interp_on_compile():
-            pypyjitdriver.on_compile(LoopToken(), oplist, 'loop',
+            pypyjitdriver.on_compile(logger, LoopToken(), oplist, 'loop',
                                      0, False, ll_code)
 
         def interp_on_compile_bridge():
-            pypyjitdriver.on_compile_bridge(LoopToken(), oplist, 0)
+            pypyjitdriver.on_compile_bridge(logger, LoopToken(), oplist, 0)
         
         cls.w_on_compile = space.wrap(interp2app(interp_on_compile))
         cls.w_on_compile_bridge = 
space.wrap(interp2app(interp_on_compile_bridge))
diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -342,17 +342,24 @@
                             raise
     set_user_param._annspecialcase_ = 'specialize:arg(0)'
 
-    def on_compile(self, looptoken, operations, type, *greenargs):
+    
+    def on_compile(self, logger, looptoken, operations, type, *greenargs):
         """ A hook called when loop is compiled. Overwrite
         for your own jitdriver if you want to do something special, like
         call applevel code
         """
 
-    def on_compile_bridge(self, orig_looptoken, operations, n):
+    def on_compile_bridge(self, logger, orig_looptoken, operations, n):
         """ A hook called when a bridge is compiled. Overwrite
         for your own jitdriver if you want to do something special
         """
 
+    # note: if you overwrite this functions with the above signature it'll
+    #       work, but the *greenargs is different for each jitdriver, so we
+    #       can't share the same methods
+    del on_compile
+    del on_compile_bridge
+
     def _make_extregistryentries(self):
         # workaround: we cannot declare ExtRegistryEntries for functions
         # used as methods of a frozen object, but we can attach the
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to