Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r57656:32322883e265
Date: 2012-09-29 07:36 +0200
http://bitbucket.org/pypy/pypy/changeset/32322883e265/

Log:    Test fixes

diff --git a/pypy/jit/backend/llgraph/llimpl.py 
b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -1810,8 +1810,9 @@
 
 def reset_vable(jd, vable):
     if jd.index_of_virtualizable != -1:
-        fielddescr = jd.vable_token_descr
-        do_setfield_gc_int(vable, fielddescr.ofs, 0)
+        fielddescr = jd.jit_frame_descr
+        do_setfield_gc_ptr(vable, fielddescr.ofs,
+                           lltype.nullptr(llmemory.GCREF.TO))
 
 def redirect_call_assembler(cpu, oldlooptoken, newlooptoken):
     oldclt = oldlooptoken.compiled_loop_token
diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py 
b/pypy/jit/metainterp/optimizeopt/virtualize.py
--- a/pypy/jit/metainterp/optimizeopt/virtualize.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualize.py
@@ -1,6 +1,6 @@
 from pypy.jit.codewriter.heaptracker import vtable2descr
 from pypy.jit.metainterp.executor import execute
-from pypy.jit.metainterp.history import Const, ConstInt, BoxInt
+from pypy.jit.metainterp.history import Const, ConstInt, BoxInt, BoxPtr
 from pypy.jit.metainterp.optimizeopt import optimizer
 from pypy.jit.metainterp.optimizeopt.util import (make_dispatcher_method,
     descrlist_dict, sort_descrs)
@@ -392,7 +392,7 @@
         # get some constants
         vrefinfo = self.optimizer.metainterp_sd.virtualref_info
         c_cls = vrefinfo.jit_virtual_ref_const_class
-        descr_virtual_token = vrefinfo.descr_virtual_token
+        descr_jit_frame = vrefinfo.descr_jit_frame
         #
         # Replace the VIRTUAL_REF operation with a virtual structure of type
         # 'jit_virtual_ref'.  The jit_virtual_ref structure may be forced soon,
@@ -400,8 +400,8 @@
         op = ResOperation(rop.NEW_WITH_VTABLE, [c_cls], op.result)
         vrefvalue = self.make_virtual(c_cls, op.result, op)
         tokenbox = BoxPtr()
-        self.emit_operation(ResOperation(rop.FORCE_TOKEN, [], tokenbox))
-        vrefvalue.setfield(descr_virtual_token, self.getvalue(tokenbox))
+        self.emit_operation(ResOperation(rop.JIT_FRAME, [], tokenbox))
+        vrefvalue.setfield(descr_jit_frame, self.getvalue(tokenbox))
 
     def optimize_VIRTUAL_REF_FINISH(self, op):
         # This operation is used in two cases.  In normal cases, it
@@ -426,10 +426,10 @@
             seo(ResOperation(rop.SETFIELD_GC, op.getarglist(), None,
                              descr = vrefinfo.descr_forced))
 
-        # - set 'virtual_token' to TOKEN_NONE
-        args = [op.getarg(0), ConstInt(vrefinfo.TOKEN_NONE)]
+        # - set 'virtual_token' to TOKEN_NONE (== NULL)
+        args = [op.getarg(0), self.optimizer.cpu.ts.CONST_NULL]
         seo(ResOperation(rop.SETFIELD_GC, args, None,
-                         descr = vrefinfo.descr_virtual_token))
+                         descr = vrefinfo.descr_jit_frame))
         # Note that in some cases the virtual in op.getarg(1) has been forced
         # already.  This is fine.  In that case, and *if* a residual
         # CALL_MAY_FORCE suddenly turns out to access it, then it will
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -1938,13 +1938,13 @@
         self.staticdata.try_to_free_some_loops()
         self.initialize_state_from_guard_failure(jitframe, key)
         try:
-            return self._handle_guard_failure(key)
+            return self._handle_guard_failure(jitframe, key)
         finally:
             self.resumekey_original_loop_token = None
             self.staticdata.profiler.end_tracing()
             debug_stop('jit-tracing')
 
-    def _handle_guard_failure(self, key):
+    def _handle_guard_failure(self, jitframe, key):
         self.current_merge_points = []
         self.resumekey = key
         self.seen_loop_header_for_jdindex = -1
@@ -1954,7 +1954,8 @@
         else:
             dont_change_position = False
         try:
-            self.prepare_resume_from_failure(key.guard_opnum, 
dont_change_position)
+            self.prepare_resume_from_failure(key.guard_opnum, jitframe,
+                                             dont_change_position)
             if self.resumekey_original_loop_token is None:   # very rare case
                 raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
             self.interpret()
@@ -2090,7 +2091,8 @@
             else: assert 0
         self.jitdriver_sd.warmstate.execute_assembler(loop_token, *args)
 
-    def prepare_resume_from_failure(self, opnum, dont_change_position=False):
+    def prepare_resume_from_failure(self, opnum, jitframe,
+                                    dont_change_position=False):
         frame = self.framestack[-1]
         if opnum == rop.GUARD_TRUE:     # a goto_if_not that jumps only now
             if not dont_change_position:
@@ -2104,7 +2106,7 @@
               opnum == rop.GUARD_NONNULL_CLASS):
             pass        # the pc is already set to the *start* of the opcode
         elif opnum == rop.GUARD_NO_EXCEPTION or opnum == rop.GUARD_EXCEPTION:
-            exception = self.cpu.grab_exc_value()
+            exception = self.cpu.grab_exc_value(jitframe)
             if exception:
                 self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR,
                                                               exception))
diff --git a/pypy/jit/metainterp/test/test_compile.py 
b/pypy/jit/metainterp/test/test_compile.py
--- a/pypy/jit/metainterp/test/test_compile.py
+++ b/pypy/jit/metainterp/test/test_compile.py
@@ -174,24 +174,27 @@
     #
     raiseme = None
     # only two arguments must be passed in
-    fail_descr = cpu.execute_token(loop_token, -156, -178)
+    jit_frame = cpu.execute_token(loop_token, -156, -178)
+    fail_descr = cpu.get_latest_descr(jit_frame)
     assert fail_descr is FakeJitDriverSD().portal_finishtoken
     #
     EXC = lltype.GcStruct('EXC')
     llexc = lltype.malloc(EXC)
     raiseme = LLException("exception class", llexc)
-    fail_descr = cpu.execute_token(loop_token, -156, -178)
+    jit_frame = cpu.execute_token(loop_token, -156, -178)
+    fail_descr = cpu.get_latest_descr(jit_frame)
     assert isinstance(fail_descr, compile.PropagateExceptionDescr)
-    got = cpu.grab_exc_value()
+    got = cpu.grab_exc_value(jit_frame)
     assert lltype.cast_opaque_ptr(lltype.Ptr(EXC), got) == llexc
     #
     class FakeMetaInterpSD:
         class ExitFrameWithExceptionRef(Exception):
             pass
     FakeMetaInterpSD.cpu = cpu
-    fail_descr = cpu.execute_token(loop_token, -156, -178)
+    jit_frame = cpu.execute_token(loop_token, -156, -178)
+    fail_descr = cpu.get_latest_descr(jit_frame)
     try:
-        fail_descr.handle_fail(FakeMetaInterpSD(), None)
+        fail_descr.handle_fail(FakeMetaInterpSD(), None, jit_frame)
     except FakeMetaInterpSD.ExitFrameWithExceptionRef, e:
         assert lltype.cast_opaque_ptr(lltype.Ptr(EXC), e.args[1]) == llexc
     else:
diff --git a/pypy/jit/metainterp/test/test_recursive.py 
b/pypy/jit/metainterp/test/test_recursive.py
--- a/pypy/jit/metainterp/test/test_recursive.py
+++ b/pypy/jit/metainterp/test/test_recursive.py
@@ -7,6 +7,7 @@
 from pypy.jit.codewriter.policy import StopAtXPolicy
 from pypy.rpython.annlowlevel import hlstr
 from pypy.jit.metainterp.warmspot import get_stats
+from pypy.jit.metainterp.jitframe import JITFRAMEPTR
 
 class RecursiveTests:
 
@@ -817,13 +818,13 @@
                 llinterpcall(lltype.Void, check_ll_frame, subframe)
         def check_ll_frame(ll_subframe):
             # This is called with the low-level Struct that is the frame.
-            # Check that the vable_token was correctly reset to zero.
+            # Check that the jit_frame was correctly reset to zero.
             # Note that in order for that test to catch failures, it needs
-            # three levels of recursion: the vable_token of the subframe
+            # three levels of recursion: the jit_frame of the subframe
             # at the level 2 is set to a non-zero value when doing the
             # call to the level 3 only.  This used to fail when the test
             # is run via pypy.jit.backend.x86.test.test_recursive.
-            assert ll_subframe.vable_token == 0
+            assert ll_subframe.jit_frame == lltype.nullptr(JITFRAMEPTR.TO)
 
         def main(codeno):
             frame = Frame()
diff --git a/pypy/jit/metainterp/test/test_resume.py 
b/pypy/jit/metainterp/test/test_resume.py
--- a/pypy/jit/metainterp/test/test_resume.py
+++ b/pypy/jit/metainterp/test/test_resume.py
@@ -18,6 +18,10 @@
     rd_virtuals = None
     rd_pendingfields = None
 
+class FakeJitFrame(object):
+    pass
+fakeframe = FakeJitFrame()
+
 
 class FakeOptimizer(object):
     def __init__(self, values):
@@ -102,13 +106,17 @@
         CONST_NULL = ConstPtr(gcrefnull)
     def __init__(self, values):
         self.values = values
-    def get_latest_value_count(self):
+    def get_latest_value_count(self, jitframe):
+        assert jitframe is fakeframe
         return len(self.values)
-    def get_latest_value_int(self, index):
+    def get_latest_value_int(self, jitframe, index):
+        assert jitframe is fakeframe
         return self.values[index]
-    def get_latest_value_ref(self, index):
+    def get_latest_value_ref(self, jitframe, index):
+        assert jitframe is fakeframe
         return self.values[index]
-    def get_latest_value_float(self, index):
+    def get_latest_value_float(self, jitframe, index):
+        assert jitframe is fakeframe
         return self.values[index]
 
 class MyBlackholeInterp:
@@ -181,12 +189,12 @@
     #
     cpu = MyCPU([42, gcref1, -66])
     metainterp = MyMetaInterp(cpu)
-    reader = ResumeDataDirectReader(metainterp, storage)
+    reader = ResumeDataDirectReader(metainterp, fakeframe, storage)
     _next_section(reader, 42, 111, gcrefnull, 42, gcref1)
     _next_section(reader, 222, 333)
     _next_section(reader, 42, gcref1, -66)
     #
-    reader = ResumeDataBoxReader(storage, metainterp)
+    reader = ResumeDataBoxReader(fakeframe, storage, metainterp)
     bi, br, bf = [None]*3, [None]*2, [None]*0
     info = MyBlackholeInterp([lltype.Signed, lltype.Signed,
                               llmemory.GCREF, lltype.Signed,
@@ -222,7 +230,7 @@
     storage.rd_numb = numb
     #
     cpu = MyCPU([])
-    reader = ResumeDataDirectReader(MyMetaInterp(cpu), storage)
+    reader = ResumeDataDirectReader(MyMetaInterp(cpu), fakeframe, storage)
     _next_section(reader, 100)
 
 
@@ -240,7 +248,8 @@
     class FakeMetainterp(object):
         _already_allocated_resume_virtuals = None
         cpu = None
-    reader = ResumeDataDirectReader(MyMetaInterp(None), FakeStorage())
+    reader = ResumeDataDirectReader(MyMetaInterp(None),
+                                    fakeframe, FakeStorage())
     assert reader.force_all_virtuals() == ["allocated", reader.virtual_default]
 
 # ____________________________________________________________
@@ -959,7 +968,7 @@
     liveboxes = modifier.finish(FakeOptimizer({}))
     assert storage.rd_snapshot is None
     cpu = MyCPU([])
-    reader = ResumeDataDirectReader(MyMetaInterp(cpu), storage)
+    reader = ResumeDataDirectReader(MyMetaInterp(cpu), fakeframe, storage)
     _next_section(reader, sys.maxint, 2**16, -65)
     _next_section(reader, 2, 3)
     _next_section(reader, sys.maxint, 1, sys.maxint, 2**16)
@@ -985,7 +994,7 @@
 class ResumeDataFakeReader(ResumeDataBoxReader):
     """Another subclass of AbstractResumeDataReader meant for tests."""
     def __init__(self, storage, newboxes, metainterp):
-        self._init(metainterp.cpu, storage)
+        self._init(metainterp.cpu, fakeframe, storage)
         self.liveboxes = newboxes
         self.metainterp = metainterp
         self._prepare(storage)
diff --git a/pypy/jit/metainterp/test/test_virtualref.py 
b/pypy/jit/metainterp/test/test_virtualref.py
--- a/pypy/jit/metainterp/test/test_virtualref.py
+++ b/pypy/jit/metainterp/test/test_virtualref.py
@@ -8,6 +8,7 @@
 from pypy.jit.metainterp.test.support import LLJitMixin, OOJitMixin, 
_get_jitcodes
 from pypy.jit.metainterp.resoperation import rop
 from pypy.jit.metainterp.virtualref import VirtualRefInfo
+from pypy.jit.metainterp import jitframe
 
 debug_print = lloperation.llop.debug_print
 
@@ -109,20 +110,20 @@
                   if str(box._getrepr_()).endswith('JitVirtualRef')]
         assert len(bxs2) == 1
         JIT_VIRTUAL_REF = self.vrefinfo.JIT_VIRTUAL_REF
-        bxs2[0].getref(lltype.Ptr(JIT_VIRTUAL_REF)).virtual_token = 1234567
+        someframe = lltype.malloc(jitframe.JITFRAMEPTR.TO, 5)
+        bxs2[0].getref(lltype.Ptr(JIT_VIRTUAL_REF)).jit_frame = someframe
         #
         # try reloading from blackhole.py's point of view
         from pypy.jit.metainterp.resume import ResumeDataDirectReader
         cpu = self.metainterp.cpu
-        cpu.get_latest_value_count = lambda : len(guard_op.getfailargs())
-        cpu.get_latest_value_int = lambda i:guard_op.getfailargs()[i].getint()
-        cpu.get_latest_value_ref = lambda 
i:guard_op.getfailargs()[i].getref_base()
-        cpu.clear_latest_values = lambda count: None
+        cpu.get_latest_value_count = lambda f: len(guard_op.getfailargs())
+        cpu.get_latest_value_int = lambda 
f,i:guard_op.getfailargs()[i].getint()
+        cpu.get_latest_value_ref = lambda 
f,i:guard_op.getfailargs()[i].getref_base()
         class FakeMetaInterpSd:
             callinfocollection = None
         FakeMetaInterpSd.cpu = cpu
         resumereader = ResumeDataDirectReader(FakeMetaInterpSd(),
-                                              guard_op.getdescr())
+                                              someframe, guard_op.getdescr())
         vrefinfo = self.metainterp.staticdata.virtualref_info
         lst = []
         vrefinfo.continue_tracing = lambda vref, virtual: \
@@ -134,7 +135,8 @@
                                lst[0][0])  # assert correct type
         #
         # try reloading from pyjitpl's point of view
-        self.metainterp.rebuild_state_after_failure(guard_op.getdescr())
+        self.metainterp.rebuild_state_after_failure(someframe,
+                                                    guard_op.getdescr())
         assert len(self.metainterp.framestack) == 1
         assert len(self.metainterp.virtualref_boxes) == 2
         assert self.metainterp.virtualref_boxes[0].value == bxs1[0].value
diff --git a/pypy/jit/metainterp/test/test_warmspot.py 
b/pypy/jit/metainterp/test/test_warmspot.py
--- a/pypy/jit/metainterp/test/test_warmspot.py
+++ b/pypy/jit/metainterp/test/test_warmspot.py
@@ -1,10 +1,12 @@
 import py
+from pypy.rpython.lltypesystem import lltype
 from pypy.jit.metainterp.warmspot import get_stats
 from pypy.rlib.jit import JitDriver, set_param, unroll_safe
 from pypy.jit.backend.llgraph import runner
 
 from pypy.jit.metainterp.test.support import LLJitMixin, OOJitMixin
 from pypy.jit.metainterp.optimizeopt import ALL_OPTS_NAMES
+from pypy.jit.metainterp.jitframe import JITFRAMEPTR
 
 
 class Exit(Exception):
@@ -333,7 +335,7 @@
         class FakeFailDescr(object):
             def __init__(self, no):
                 self.no = no
-            def handle_fail(self, metainterp_sd, jitdrivers_sd):
+            def handle_fail(self, metainterp_sd, jitdrivers_sd, jitframe):
                 no = self.no
                 if no == 0:
                     raise metainterp_sd.warmrunnerdesc.DoneWithThisFrameInt(3)
@@ -372,12 +374,13 @@
             calldescrof  = nodescr
             sizeof       = nodescr
 
-            def get_fail_descr_from_number(self, no):
-                return FakeFailDescr(no)
-
             def make_execute_token(self, *ARGS):
                 return "not callable"
 
+            def get_latest_descr(self, frame):
+                assert lltype.typeOf(frame) == JITFRAMEPTR
+                return FakeFailDescr(self._fail_index)
+
         driver = JitDriver(reds = ['red'], greens = ['green'])
 
         def f(green):
@@ -398,10 +401,15 @@
         from pypy.rpython.llinterp import LLException
 
         [jd] = self.desc.jitdrivers_sd
-        assert jd._assembler_call_helper(0, 0) == 3
-        assert jd._assembler_call_helper(1, 0) == 10
+        cpu = self.desc.cpu
+        fakeframe = lltype.malloc(JITFRAMEPTR.TO, 5)
+        cpu._fail_index = 0
+        assert jd._assembler_call_helper(fakeframe, 0) == 3
+        cpu._fail_index = 1
+        assert jd._assembler_call_helper(fakeframe, 0) == 10
         try:
-            jd._assembler_call_helper(3, 0)
+            cpu._fail_index = 3
+            jd._assembler_call_helper(fakeframe, 0)
         except LLException, lle:
             assert lle[0] == self.exc_vtable
         else:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to