Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r58315:7e70e3dbc09b
Date: 2012-10-21 15:32 +0200
http://bitbucket.org/pypy/pypy/changeset/7e70e3dbc09b/

Log:    Test and fix.

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -875,6 +875,13 @@
         frame = self.cpu._execute_token(descr, *args)
         if frame._execution_finished_normally:    # fast path
             return frame.finish_value
+        #
+        call_op = self.lltrace.operations[self.current_index]
+        guard_op = self.lltrace.operations[self.current_index + 1]
+        assert guard_op.getopnum() == rop.GUARD_NOT_FORCED
+        self.latest_values = self._getfailargs(guard_op, skip=call_op.result)
+        self.latest_descr = _getdescr(guard_op)
+        #
         jd = descr.outermost_jitdriver_sd
         assembler_helper_ptr = jd.assembler_helper_adr.ptr  # fish
         try:
@@ -885,6 +892,9 @@
             if self.current_op.result is not None:
                 return _example_res[self.current_op.result.type]
             return None
+        #
+        del self.latest_descr
+        del self.latest_values
         return support.cast_result(lltype.typeOf(result), result)
 
     def execute_same_as(self, _, x):
diff --git a/pypy/jit/backend/test/runner_test.py 
b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -2750,7 +2750,6 @@
         FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              lltype.Signed))
         class FakeJitDriverSD:
-            index_of_virtualizable = -1
             _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
             assembler_helper_adr = llmemory.cast_ptr_to_adr(
                 _assembler_helper_ptr)
@@ -2823,7 +2822,6 @@
         FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              lltype.Float))
         class FakeJitDriverSD:
-            index_of_virtualizable = -1
             _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
             assembler_helper_adr = llmemory.cast_ptr_to_adr(
                 _assembler_helper_ptr)
@@ -2878,6 +2876,50 @@
         assert longlong.getrealfloat(x) == 13.5
         assert called == [fail_number]
 
+    def test_assembler_call_get_latest_descr(self):
+        called = []
+        def assembler_helper(jitframe):
+            jitframe1 = self.cpu.get_finish_value_ref(jitframe)
+            called.append(self.cpu.get_latest_descr(jitframe1))
+            return lltype.nullptr(llmemory.GCREF.TO)
+
+        FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
+                                             llmemory.GCREF))
+        class FakeJitDriverSD:
+            _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
+            assembler_helper_adr = llmemory.cast_ptr_to_adr(
+                _assembler_helper_ptr)
+
+        ops = '''
+        [p0]
+        finish(p0) []'''
+        loop = parse(ops)
+        # not a fast_path finish!
+        looptoken = JitCellToken()
+        looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
+        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        ARGS = [llmemory.GCREF]
+        RES = llmemory.GCREF
+        FakeJitDriverSD.portal_calldescr = self.cpu.calldescrof(
+            lltype.Ptr(lltype.FuncType(ARGS, RES)), ARGS, RES,
+            EffectInfo.MOST_GENERAL)
+
+        foodescr = BasicFailDescr(66)
+        ops = '''
+        []
+        p0 = jit_frame()
+        p1 = call_assembler(p0, descr=looptoken)
+        guard_not_forced(descr=foodescr) []
+        finish() []
+        '''
+        loop2 = parse(ops, namespace=locals())
+        othertoken = JitCellToken()
+        self.cpu.compile_loop(loop2.inputargs, loop2.operations, othertoken)
+
+        frame = self.cpu.execute_token(othertoken)
+        assert not self.cpu.get_finish_value_ref(frame)
+        assert called == [foodescr]
+
     def test_raw_malloced_getarrayitem(self):
         ARRAY = rffi.CArray(lltype.Signed)
         descr = self.cpu.arraydescrof(ARRAY)
@@ -2915,7 +2957,6 @@
         FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              lltype.Float))
         class FakeJitDriverSD:
-            index_of_virtualizable = -1
             _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
             assembler_helper_adr = llmemory.cast_ptr_to_adr(
                 _assembler_helper_ptr)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to