[pypy-svn] r74809 - in pypy/trunk/pypy: jit/metainterp jit/metainterp/test rlib rlib/test

arigo at codespeak.net arigo at codespeak.net
Thu May 27 15:22:36 CEST 2010


Author: arigo
Date: Thu May 27 15:22:34 2010
New Revision: 74809

Modified:
   pypy/trunk/pypy/jit/metainterp/codewriter.py
   pypy/trunk/pypy/jit/metainterp/pyjitpl.py
   pypy/trunk/pypy/jit/metainterp/test/test_basic.py
   pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py
   pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py
   pypy/trunk/pypy/jit/metainterp/test/test_recursive.py
   pypy/trunk/pypy/jit/metainterp/warmspot.py
   pypy/trunk/pypy/rlib/jit.py
   pypy/trunk/pypy/rlib/test/test_jit.py
Log:
Kill the deprecated "leave" hook.  Preparation for trying
to clean up pyjitpl's production of CALL_ASSEMBLER.


Modified: pypy/trunk/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/codewriter.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/codewriter.py	Thu May 27 15:22:34 2010
@@ -76,16 +76,13 @@
         self.raise_analyzer = None
         self.jitdriver = None
 
-    def find_all_graphs(self, portal_graph, leave_graph,
-                        policy, supports_floats):
+    def find_all_graphs(self, portal_graph, policy, supports_floats):
         from pypy.translator.simplify import get_graph
         def is_candidate(graph):
             return policy.look_inside_graph(graph)
         policy.set_supports_floats(supports_floats)
         
         todo = [portal_graph]
-        if leave_graph is not None:
-            todo.append(leave_graph)        
         self.candidate_graphs = seen = set(todo)
 
         def callers():
@@ -178,15 +175,12 @@
         return graph in self.candidate_graphs
 
 
-    def generate_bytecode(self, metainterp_sd, portal_graph, leave_graph,
+    def generate_bytecode(self, metainterp_sd, portal_graph,
                           portal_runner_ptr):
         self._start(metainterp_sd, portal_runner_ptr)
-        leave_code = None
-        if leave_graph:
-            leave_code = self.make_one_bytecode((leave_graph, None), False)
         portal_code = self.make_portal_bytecode(portal_graph)
 
-        self.metainterp_sd.info_from_codewriter(portal_code, leave_code,
+        self.metainterp_sd.info_from_codewriter(portal_code,
                                                 self.class_sizes,
                                                 self.list_of_addr2name,
                                                 portal_runner_ptr)
@@ -1285,8 +1279,6 @@
         calldescr, non_void_args = self.codewriter.getcalldescr(op.args[0],
                                                                 args,
                                                                 op.result)
-        self.emit('recursion_leave_prep')
-        self.emit_varargs(non_void_args)        
         self.emit('recursive_call')
         self.emit(self.get_position(calldescr))
         self.emit_varargs([op.args[0]] + non_void_args)

Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py	Thu May 27 15:22:34 2010
@@ -647,19 +647,6 @@
     @arguments("descr", "varargs")
     def opimpl_residual_call_loopinvariant(self, calldescr, varargs):
         return self.execute_varargs(rop.CALL_LOOPINVARIANT, varargs, calldescr, exc=True)
-
-    @arguments("varargs")
-    def opimpl_recursion_leave_prep(self, varargs):
-        warmrunnerstate = self.metainterp.staticdata.state
-        if warmrunnerstate.inlining:
-            num_green_args = self.metainterp.staticdata.num_green_args
-            greenkey = varargs[:num_green_args]
-            if warmrunnerstate.can_inline_callable(greenkey):
-                return False
-        leave_code = self.metainterp.staticdata.leave_code
-        if leave_code is None:
-            return False
-        return self.perform_call(leave_code, varargs)
         
     @arguments("orgpc", "descr", "varargs")
     def opimpl_recursive_call(self, pc, calldescr, varargs):
@@ -1133,7 +1120,6 @@
         self.jit_starting_line = 'JIT starting (%s)' % backendmodule
 
         self.portal_code = None
-        self.leave_code = None
         self._class_sizes = None
         self._addr2name_keys = []
         self._addr2name_values = []
@@ -1146,10 +1132,9 @@
     def _freeze_(self):
         return True
 
-    def info_from_codewriter(self, portal_code, leave_code, class_sizes,
+    def info_from_codewriter(self, portal_code, class_sizes,
                              list_of_addr2name, portal_runner_ptr):
         self.portal_code = portal_code
-        self.leave_code = leave_code
         self._class_sizes = class_sizes
         self._addr2name_keys   = [key   for key, value in list_of_addr2name]
         self._addr2name_values = [value for key, value in list_of_addr2name]

Modified: pypy/trunk/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_basic.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_basic.py	Thu May 27 15:22:34 2010
@@ -93,7 +93,7 @@
         portal_graph = rtyper.annotator.translator.graphs[0]
         cw = codewriter.CodeWriter(rtyper)
         
-        graphs = cw.find_all_graphs(portal_graph, None, JitPolicy(),
+        graphs = cw.find_all_graphs(portal_graph, JitPolicy(),
                                     self.CPUClass.supports_floats)
         cw._start(metainterp.staticdata, None)
         portal_graph.func._jit_unroll_safe_ = True

Modified: pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py	Thu May 27 15:22:34 2010
@@ -25,7 +25,7 @@
     rtyper = support.annotate(i, [7])
     cw = CodeWriter(rtyper)
     jitpolicy = JitPolicy()
-    res = cw.find_all_graphs(rtyper.annotator.translator.graphs[0], None,
+    res = cw.find_all_graphs(rtyper.annotator.translator.graphs[0],
                              jitpolicy, True)
     translator = rtyper.annotator.translator
 
@@ -41,13 +41,13 @@
     cw = CodeWriter(rtyper)
     jitpolicy = JitPolicy()
     translator = rtyper.annotator.translator
-    res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+    res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
                              supports_floats=True)
     funcs = set([graph.func for graph in res])
     assert funcs == set([f, g])
 
     cw = CodeWriter(rtyper)        
-    res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+    res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
                              supports_floats=False)
     funcs = [graph.func for graph in res]
     assert funcs == [f]
@@ -75,7 +75,7 @@
     cw = CodeWriter(rtyper)
     jitpolicy = JitPolicy()
     translator = rtyper.annotator.translator
-    res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+    res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
                              supports_floats=True)
     funcs = set([graph.func for graph in res])
     assert funcs == set([f, h])
@@ -96,7 +96,7 @@
     cw = CodeWriter(rtyper)
     jitpolicy = JitPolicy()
     translator = rtyper.annotator.translator
-    res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+    res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
                              supports_floats=True)
     funcs = set([graph.func for graph in res])
     assert funcs == set([g, h])
@@ -110,7 +110,7 @@
     jitpolicy = JitPolicy()
     translator = rtyper.annotator.translator
     # does not explode
-    cw.find_all_graphs(translator.graphs[0], None, jitpolicy, True)
+    cw.find_all_graphs(translator.graphs[0], jitpolicy, True)
 
 class SomeLabel(object):
     def __eq__(self, other):

Modified: pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py	Thu May 27 15:22:34 2010
@@ -121,7 +121,7 @@
         def __init__(self):
             pass
     metainterp_sd = FakeMetaInterpSd()
-    metainterp_sd.info_from_codewriter(None, None, None,
+    metainterp_sd.info_from_codewriter(None, None,
                                        [(123, "a"), (456, "b")],
                                        None)
     assert metainterp_sd.get_name_from_address(123) == 'a'

Modified: pypy/trunk/pypy/jit/metainterp/test/test_recursive.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_recursive.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_recursive.py	Thu May 27 15:22:34 2010
@@ -494,77 +494,6 @@
         res = self.meta_interp(main, [1], optimizer=OPTIMIZER_SIMPLE, trace_limit=TRACE_LIMIT)
         self.check_loops(call_may_force=0, call=0)
 
-    def test_leave_jit_hook(self):
-        from pypy.rpython.annlowlevel import hlstr
-        def p(code, pc):
-            code = hlstr(code)
-            return "%s %d %s" % (code, pc, code[pc])
-        def c(code, pc):
-            return "L" not in hlstr(code)
-
-        def really_leave(frame):
-            frame.hookcalled = True
-
-        def leave(code, pc, frame):
-            really_leave(frame)
-
-        class ExpectedHook(Exception):
-            pass
-        class UnexpectedHook(Exception):
-            pass
-
-        myjitdriver = JitDriver(greens=['code', 'pc'], reds=['self'],
-                                get_printable_location=p, can_inline=c,
-                                leave=leave)
-        class Frame(object):
-            hookcalled = True
-            
-            def __init__(self, n):
-                self.n = n
-                self.hookcalled = False
-            def f(self, code):
-                pc = 0
-                while pc < len(code):
-
-                    myjitdriver.jit_merge_point(self=self, code=code, pc=pc)
-                    op = code[pc]
-                    if op == "-":
-                        self.n -= 1
-                    elif op == "c":
-                        frame = Frame(self.n)
-                        self.n = frame.f("---i---")
-                        if we_are_jitted():
-                            if frame.hookcalled:
-                                raise UnexpectedHook
-                    elif op == "C":
-                        frame = Frame(self.n)
-                        self.n = frame.f("cL")
-                        if we_are_jitted():
-                            if not frame.hookcalled:
-                                raise ExpectedHook
-                    elif op == "i":
-                        if self.n % 5 == 1:
-                            return self.n
-                    elif op == "l":
-                        if self.n > 0:
-                            myjitdriver.can_enter_jit(self=self, code=code, pc=0)
-                            pc = 0
-                            continue
-                    elif op == "L":
-                        if self.n > 50:
-                            myjitdriver.can_enter_jit(self=self, code=code, pc=0)
-                            pc = 0
-                            continue
-                    else:
-                        assert 0
-                    pc += 1
-                return self.n
-        def main(n):
-            frame = Frame(n)
-            return frame.f("C-l")
-        res = self.meta_interp(main, [100], optimizer=OPTIMIZER_SIMPLE, inline=True)
-        assert res == main(100)
-
     def test_trace_from_start(self):
         def p(code, pc):
             code = hlstr(code)

Modified: pypy/trunk/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/warmspot.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/warmspot.py	Thu May 27 15:22:34 2010
@@ -150,10 +150,8 @@
             policy = JitPolicy()
         self.set_translator(translator)
         self.find_portal()
-        self.make_leave_jit_graph()
         self.codewriter = codewriter.CodeWriter(self.rtyper)
         graphs = self.codewriter.find_all_graphs(self.portal_graph,
-                                                 self.leave_graph,
                                                  policy,
                                                  CPUClass.supports_floats)
         policy.dump_unsafe_loops()
@@ -177,7 +175,6 @@
                 
         self.codewriter.generate_bytecode(self.metainterp_sd,
                                           self.portal_graph,
-                                          self.leave_graph,
                                           self.portal_runner_ptr
                                           )
         self.rewrite_can_enter_jit()
@@ -332,6 +329,7 @@
         self.metainterp_sd.DoneWithThisFrameFloat = DoneWithThisFrameFloat
         self.metainterp_sd.ExitFrameWithExceptionRef = ExitFrameWithExceptionRef
         self.metainterp_sd.ContinueRunningNormally = ContinueRunningNormally
+
     def make_enter_function(self):
         from pypy.jit.metainterp.warmstate import WarmEnterState
         state = WarmEnterState(self)
@@ -369,18 +367,6 @@
                 maybe_compile_and_run(*args)
         maybe_enter_from_start._always_inline_ = True
         self.maybe_enter_from_start_fn = maybe_enter_from_start
-
-
-    def make_leave_jit_graph(self):
-        self.leave_graph = None
-        if self.jitdriver.leave:
-            args_s = self.portal_args_s
-            from pypy.annotation import model as annmodel
-            annhelper = MixLevelHelperAnnotator(self.translator.rtyper)
-            s_result = annmodel.s_None
-            self.leave_graph = annhelper.getgraph(self.jitdriver.leave,
-                                                  args_s, s_result)
-            annhelper.finish()
         
     def make_driverhook_graphs(self):
         from pypy.rlib.jit import BaseJitCell

Modified: pypy/trunk/pypy/rlib/jit.py
==============================================================================
--- pypy/trunk/pypy/rlib/jit.py	(original)
+++ pypy/trunk/pypy/rlib/jit.py	Thu May 27 15:22:34 2010
@@ -224,8 +224,7 @@
     def __init__(self, greens=None, reds=None, virtualizables=None,
                  get_jitcell_at=None, set_jitcell_at=None,
                  can_inline=None, get_printable_location=None,
-                 confirm_enter_jit=None,
-                 leave=None):   # XXX 'leave' is deprecated
+                 confirm_enter_jit=None):
         if greens is not None:
             self.greens = greens
         if reds is not None:
@@ -243,7 +242,6 @@
         self.get_printable_location = get_printable_location
         self.can_inline = can_inline
         self.confirm_enter_jit = confirm_enter_jit
-        self.leave = leave
 
     def _freeze_(self):
         return True
@@ -358,7 +356,6 @@
                            **kwds_s)
         self.annotate_hook(driver.can_inline, driver.greens, **kwds_s)
         self.annotate_hook(driver.get_printable_location, driver.greens, **kwds_s)
-        self.annotate_hook(driver.leave, driver.greens + driver.reds, **kwds_s)
 
     def annotate_hook(self, func, variables, args_s=[], **kwds_s):
         if func is None:

Modified: pypy/trunk/pypy/rlib/test/test_jit.py
==============================================================================
--- pypy/trunk/pypy/rlib/test/test_jit.py	(original)
+++ pypy/trunk/pypy/rlib/test/test_jit.py	Thu May 27 15:22:34 2010
@@ -61,12 +61,10 @@
         
         def can_inline(m): pass
         def get_printable_location(m): pass
-        def leave(m, n): pass
         
         myjitdriver = JitDriver(greens=['m'], reds=['n'],
                                 can_inline=can_inline,
-                                get_printable_location=get_printable_location,
-                                leave=leave)
+                                get_printable_location=get_printable_location)
         def fn(n):
             m = 42.5
             while n > 0:
@@ -83,9 +81,6 @@
                     return [v.concretetype for v in graph.getargs()]
             raise Exception, 'function %r has not been annotated' % func
 
-        leave_args = getargs(leave)
-        assert leave_args == [lltype.Float, lltype.Signed]
-
         can_inline_args = getargs(can_inline)
         get_printable_location_args = getargs(get_printable_location)
         assert can_inline_args == get_printable_location_args == [lltype.Float]



More information about the Pypy-commit mailing list