Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r58219:27c93b400d64
Date: 2012-10-18 17:20 +0200
http://bitbucket.org/pypy/pypy/changeset/27c93b400d64/

Log:    fix fix fix 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
@@ -27,9 +27,10 @@
         self.descr = descr
 
 class ExecutionFinished(Exception):
-    def __init__(self, descr, arg=None):
+    def __init__(self, descr, arg, failargs):
         self.descr = descr
         self.arg = arg
+        self.failargs = failargs
 
 class Jump(Exception):
     def __init__(self, descr, args):
@@ -214,6 +215,7 @@
             assert False
         except ExecutionFinished, e:
             frame.finish_value = e.arg
+            frame.latest_values = e.failargs
             frame.latest_descr = e.descr
             return frame
         except GuardFailed, e:
@@ -624,7 +626,11 @@
         raise GuardFailed(self._getfailargs(), descr)
 
     def execute_finish(self, descr, arg=None):
-        raise ExecutionFinished(descr, arg)
+        if self.current_op.getfailargs() is not None:
+            failargs = self._getfailargs()
+        else:
+            failargs = None   # compatibility
+        raise ExecutionFinished(descr, arg, failargs)
 
     def execute_label(self, descr, *args):
         argboxes = self.current_op.getarglist()
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
@@ -63,11 +63,11 @@
         else:
             self.guard_failed = True
         if result_type == 'int':
-            return BoxInt(self.cpu.get_latest_value_int(frame, 0))
+            return BoxInt(self.cpu.get_finish_value_int(frame))
         elif result_type == 'ref':
-            return BoxPtr(self.cpu.get_latest_value_ref(frame, 0))
+            return BoxPtr(self.cpu.get_finish_value_ref(frame))
         elif result_type == 'float':
-            return BoxFloat(self.cpu.get_latest_value_float(frame, 0))
+            return BoxFloat(self.cpu.get_finish_value_float(frame))
         elif result_type == 'void':
             return None
         else:
@@ -119,7 +119,7 @@
         looptoken = JitCellToken()
         self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 2)
-        res = self.cpu.get_latest_value_int(frame, 0)
+        res = self.cpu.get_finish_value_int(frame)
         assert res == 3
         assert self.cpu.get_latest_descr(frame).identifier == 1
 
@@ -134,7 +134,7 @@
         looptoken = JitCellToken()
         self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 
longlong.getfloatstorage(2.8))
-        res = self.cpu.get_latest_value_float(frame, 0)
+        res = self.cpu.get_finish_value_int(frame)
         assert longlong.getrealfloat(res) == 5.1
         assert self.cpu.get_latest_descr(frame).identifier == 1
 
@@ -363,7 +363,7 @@
         self.cpu.compile_loop([i0], operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 99)
         assert self.cpu.get_latest_descr(frame) is faildescr
-        res = self.cpu.get_latest_value_int(frame, 0)
+        res = self.cpu.get_finish_value_int(frame)
         assert res == 99
 
         looptoken = JitCellToken()
@@ -373,7 +373,7 @@
         self.cpu.compile_loop([], operations, looptoken)
         frame = self.cpu.execute_token(looptoken)
         assert self.cpu.get_latest_descr(frame) is faildescr
-        res = self.cpu.get_latest_value_int(frame, 0)
+        res = self.cpu.get_finish_value_int(frame)
         assert res == 42
 
         looptoken = JitCellToken()
@@ -394,7 +394,7 @@
             value = longlong.getfloatstorage(-61.25)
             frame = self.cpu.execute_token(looptoken, value)
             assert self.cpu.get_latest_descr(frame) is faildescr
-            res = self.cpu.get_latest_value_float(frame, 0)
+            res = self.cpu.get_finish_value_float(frame)
             assert longlong.getrealfloat(res) == -61.25
 
             looptoken = JitCellToken()
@@ -404,7 +404,7 @@
             self.cpu.compile_loop([], operations, looptoken)
             frame = self.cpu.execute_token(looptoken)
             assert self.cpu.get_latest_descr(frame) is faildescr
-            res = self.cpu.get_latest_value_float(frame, 0)
+            res = self.cpu.get_finish_value_float(frame)
             assert longlong.getrealfloat(res) == 42.5
 
     def test_execute_operations_in_env(self):
@@ -492,9 +492,10 @@
                 else:
                     assert self.cpu.get_latest_descr(frame).identifier == 2
                 if z != boom:
-                    assert self.cpu.get_latest_value_int(frame, 0) == z
-                excvalue = self.cpu.grab_exc_value(frame)
-                assert not excvalue
+                    if not reversed:
+                        assert self.cpu.get_finish_value_int(frame) == z
+                    else:
+                        assert self.cpu.get_latest_value_int(frame, 0) == z
 
     def test_ovf_operations_reversed(self):
         self.test_ovf_operations(reversed=True)
@@ -1202,8 +1203,9 @@
                 retvalues.insert(kk, y)
             #
             operations.append(
-                ResOperation(rop.FINISH, retboxes, None, descr=faildescr)
+                ResOperation(rop.FINISH, [], None, descr=faildescr)
                 )
+            operations[-1].setfailargs(retboxes)
             print inputargs
             for op in operations:
                 print op
@@ -1326,9 +1328,10 @@
             ResOperation(rop.LABEL, fboxes, None, descr=targettoken),
             ResOperation(rop.FLOAT_LE, [fboxes[0], constfloat(9.2)], i2),
             ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr1),
-            ResOperation(rop.FINISH, fboxes, None, descr=faildescr2),
+            ResOperation(rop.FINISH, [], None, descr=faildescr2),
             ]
         operations[-2].setfailargs(fboxes)
+        operations[-1].setfailargs(fboxes)
         looptoken = JitCellToken()
         self.cpu.compile_loop(fboxes, operations, looptoken)
 
@@ -1382,8 +1385,9 @@
         assert longlong.getrealfloat(f3) == 133.0
 
         bridgeops = [
-            ResOperation(rop.FINISH, fboxes, None, descr=faildescr1),
+            ResOperation(rop.FINISH, [], None, descr=faildescr1),
             ]
+        bridgeops[-1].setfailargs(fboxes)
         self.cpu.compile_bridge(loop.operations[-2].getdescr(), fboxes,
                                                         bridgeops, looptoken)
         args = [1,
@@ -1976,7 +1980,7 @@
         i1 = same_as(1)
         call(ConstClass(fptr), i0, descr=calldescr)
         p0 = guard_exception(ConstClass(xtp)) [i1]
-        finish(0, p0)
+        finish(p0)
         '''
         FPTR = lltype.Ptr(lltype.FuncType([lltype.Signed], lltype.Void))
         fptr = llhelper(FPTR, func)
@@ -1997,13 +2001,10 @@
         looptoken = JitCellToken()
         self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 1)
-        assert self.cpu.get_latest_value_int(frame, 0) == 0
-        assert self.cpu.get_latest_value_ref(frame, 1) == xptr
-        excvalue = self.cpu.grab_exc_value(frame)
-        assert not excvalue
+        assert self.cpu.get_finish_value_ref(frame) == xptr
         frame = self.cpu.execute_token(looptoken, 0)
         assert self.cpu.get_latest_value_int(frame, 0) == 1
-        excvalue = self.cpu.grab_exc_value(frame)
+        excvalue = self.cpu.get_finish_value_ref(frame)
         assert not excvalue
 
         ytp = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
@@ -2022,9 +2023,8 @@
         self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 1)
         assert self.cpu.get_latest_value_int(frame, 0) == 1
-        excvalue = self.cpu.grab_exc_value(frame)
+        excvalue = self.cpu.get_finish_value_ref(frame)
         assert excvalue == yptr
-        assert not self.cpu.grab_exc_value(frame)   # cleared
 
         exc_tp = xtp
         exc_ptr = xptr
@@ -2033,19 +2033,17 @@
         i1 = same_as(1)
         call(ConstClass(fptr), i0, descr=calldescr)
         guard_no_exception() [i1]
-        finish(0)
+        finish(-100)
         '''
         loop = parse(ops, self.cpu, namespace=locals())
         looptoken = JitCellToken()
         self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 1)
         assert self.cpu.get_latest_value_int(frame, 0) == 1
-        excvalue = self.cpu.grab_exc_value(frame)
+        excvalue = self.cpu.get_finish_value_ref(frame)
         assert excvalue == xptr
         frame = self.cpu.execute_token(looptoken, 0)
-        assert self.cpu.get_latest_value_int(frame, 0) == 0
-        excvalue = self.cpu.grab_exc_value(frame)
-        assert not excvalue
+        assert self.cpu.get_finish_value_int(frame) == -100
 
     def test_cond_call_gc_wb(self):
         def func_void(a):
@@ -2230,7 +2228,7 @@
         self.cpu.compile_loop([i0, i1], ops, looptoken)
         frame = self.cpu.execute_token(looptoken, 20, 0)
         assert self.cpu.get_latest_descr(frame).identifier == 0
-        assert self.cpu.get_latest_value_int(frame, 0) == 20
+        assert self.cpu.get_finish_value_int(frame) == 20
         assert values == []
 
         frame = self.cpu.execute_token(looptoken, 10, 1)
@@ -2273,7 +2271,7 @@
         self.cpu.compile_loop([i0, i1], ops, looptoken)
         frame = self.cpu.execute_token(looptoken, 20, 0)
         assert self.cpu.get_latest_descr(frame).identifier == 0
-        assert self.cpu.get_latest_value_int(frame, 0) == 42
+        assert self.cpu.get_finish_value_int(frame) == 42
         assert values == []
 
         frame = self.cpu.execute_token(looptoken, 10, 1)
@@ -2318,7 +2316,7 @@
         self.cpu.compile_loop([i0, i1], ops, looptoken)
         frame = self.cpu.execute_token(looptoken, 20, 0)
         assert self.cpu.get_latest_descr(frame).identifier == 0
-        x = self.cpu.get_latest_value_float(frame, 0)
+        x = self.cpu.get_finish_value_float(frame)
         assert longlong.getrealfloat(x) == 42.5
         assert values == []
 
@@ -2356,7 +2354,7 @@
         self.cpu.compile_loop([i1], ops, looptoken)
         frame = self.cpu.execute_token(looptoken, ord('G'))
         assert self.cpu.get_latest_descr(frame).identifier == 0
-        assert self.cpu.get_latest_value_int(frame, 0) == ord('g')
+        assert self.cpu.get_finish_value_int(frame) == ord('g')
 
     def test_call_to_c_function_with_callback(self):
         from pypy.rlib.libffi import CDLL, types, ArgChain, clibffi
@@ -2471,7 +2469,7 @@
         args = [buflen, rffi.cast(lltype.Signed, buffer)]
         frame = self.cpu.execute_token(looptoken, *args)
         assert self.cpu.get_latest_descr(frame).identifier == 0
-        assert self.cpu.get_latest_value_int(frame, 0) == len(cwd)
+        assert self.cpu.get_finish_value_int(frame) == len(cwd)
         assert rffi.charp2strn(buffer, buflen) == cwd
         lltype.free(buffer, flavor='raw')
 
@@ -2490,7 +2488,7 @@
 
         frame = self.cpu.execute_token(looptoken, -42, 9)
         assert self.cpu.get_latest_descr(frame).identifier == 0
-        assert self.cpu.get_latest_value_int(frame, 0) == -42
+        assert self.cpu.get_finish_value_int(frame) == -42
         print 'step 1 ok'
         print '-'*79
 
@@ -2515,7 +2513,7 @@
 
         frame = self.cpu.execute_token(looptoken, -42, 9)
         assert self.cpu.get_latest_descr(frame).identifier == 3
-        assert self.cpu.get_latest_value_int(frame, 0) == 9
+        assert self.cpu.get_finish_value_int(frame) == 9
         print 'step 3 ok'
         print '-'*79
 
@@ -2554,7 +2552,7 @@
         # run: must not be caught in an infinite loop
         frame = self.cpu.execute_token(looptoken, 16)
         assert self.cpu.get_latest_descr(frame).identifier == 3
-        assert self.cpu.get_latest_value_int(frame, 0) == 333
+        assert self.cpu.get_finish_value_int(frame) == 333
 
     # pure do_ / descr features
 
@@ -2726,8 +2724,8 @@
     def test_assembler_call(self):
         called = []
         def assembler_helper(jitframe):
-            assert self.cpu.get_latest_value_int(jitframe, 0) == 97
-            faildescr =self.cpu.get_latest_descr(jitframe) 
+            assert self.cpu.get_finish_value_int(jitframe) == 97
+            faildescr = self.cpu.get_latest_descr(jitframe)
             failindex = self.cpu.get_fail_descr_number(faildescr)
             called.append(failindex)
             return 4 + 9
@@ -2767,7 +2765,7 @@
             EffectInfo.MOST_GENERAL)
         args = [i+1 for i in range(10)]
         frame = self.cpu.execute_token(looptoken, *args)
-        assert self.cpu.get_latest_value_int(frame, 0) == 55
+        assert self.cpu.get_finish_value_int(frame) == 55
         ops = '''
         [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9]
         i10 = int_add(i0, 42)
@@ -2780,7 +2778,7 @@
         self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
         args = [i+1 for i in range(10)]
         frame = self.cpu.execute_token(othertoken, *args)
-        assert self.cpu.get_latest_value_int(frame, 0) == 13
+        assert self.cpu.get_finish_value_int(frame) == 13
         assert called == [done_number]
 
         # test the fast path, which should not call assembler_helper()
@@ -2791,7 +2789,7 @@
             self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
             args = [i+1 for i in range(10)]
             frame = self.cpu.execute_token(othertoken, *args)
-            assert self.cpu.get_latest_value_int(frame, 0) == 97
+            assert self.cpu.get_finish_value_int(frame) == 97
             assert not called
         finally:
             del self.cpu.done_with_this_frame_int_v
@@ -2800,15 +2798,15 @@
         if not self.cpu.supports_floats:
             py.test.skip("requires floats")
         called = []
-        def assembler_helper(jitframe, virtualizable):
-            x = self.cpu.get_latest_value_float(jitframe, 0)
+        def assembler_helper(jitframe):
+            x = self.cpu.get_finish_value_float(jitframe)
             assert longlong.getrealfloat(x) == 1.2 + 3.2
             faildescr =self.cpu.get_latest_descr(jitframe)
             failindex = self.cpu.get_fail_descr_number(faildescr)
             called.append(failindex)
             return 13.5
 
-        FUNCPTR = lltype.Ptr(lltype.FuncType([self.cpu.JITFRAMEPTR, 
llmemory.GCREF],
+        FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              lltype.Float))
         class FakeJitDriverSD:
             index_of_virtualizable = -1
@@ -2835,7 +2833,7 @@
         args = [longlong.getfloatstorage(1.2),
                 longlong.getfloatstorage(2.3)]
         frame = self.cpu.execute_token(looptoken, *args)
-        x = self.cpu.get_latest_value_float(frame, 0)
+        x = self.cpu.get_finish_value_float(frame)
         assert longlong.getrealfloat(x) == 1.2 + 2.3
         ops = '''
         [f4, f5]
@@ -2849,7 +2847,7 @@
         args = [longlong.getfloatstorage(1.2),
                 longlong.getfloatstorage(3.2)]
         frame = self.cpu.execute_token(othertoken, *args)
-        x = self.cpu.get_latest_value_float(frame, 0)
+        x = self.cpu.get_finish_value_float(frame)
         assert longlong.getrealfloat(x) == 13.5
         assert called == [done_number]
 
@@ -2862,7 +2860,7 @@
             args = [longlong.getfloatstorage(1.2),
                     longlong.getfloatstorage(3.2)]
             frame = self.cpu.execute_token(othertoken, *args)
-            x = self.cpu.get_latest_value_float(frame, 0)
+            x = self.cpu.get_finish_value_float(frame)
             assert longlong.getrealfloat(x) == 1.2 + 3.2
             assert not called
         finally:
@@ -2896,15 +2894,15 @@
         if not self.cpu.supports_floats:
             py.test.skip("requires floats")
         called = []
-        def assembler_helper(jitframe, virtualizable):
-            x = self.cpu.get_latest_value_float(jitframe, 0)
+        def assembler_helper(jitframe):
+            x = self.cpu.get_finish_value_float(jitframe)
             assert longlong.getrealfloat(x) == 1.25 + 3.25
             faildescr =self.cpu.get_latest_descr(jitframe)
             failindex = self.cpu.get_fail_descr_number(faildescr)
             called.append(failindex)
             return 13.5
 
-        FUNCPTR = lltype.Ptr(lltype.FuncType([self.cpu.JITFRAMEPTR, 
llmemory.GCREF],
+        FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              lltype.Float))
         class FakeJitDriverSD:
             index_of_virtualizable = -1
@@ -2931,7 +2929,7 @@
         args = [longlong.getfloatstorage(1.25),
                 longlong.getfloatstorage(2.35)]
         frame = self.cpu.execute_token(looptoken, *args)
-        x = self.cpu.get_latest_value_float(frame, 0)
+        x = self.cpu.get_finish_value_float(frame)
         assert longlong.getrealfloat(x) == 1.25 + 2.35
         assert not called
 
@@ -2949,7 +2947,7 @@
         args = [longlong.getfloatstorage(1.25),
                 longlong.getfloatstorage(3.25)]
         frame = self.cpu.execute_token(othertoken, *args)
-        x = self.cpu.get_latest_value_float(frame, 0)
+        x = self.cpu.get_finish_value_float(frame)
         assert longlong.getrealfloat(x) == 13.5
         assert called == [done_number]
         del called[:]
@@ -2972,7 +2970,7 @@
         args = [longlong.getfloatstorage(6.0),
                 longlong.getfloatstorage(1.5)]         # 6.0-1.5 == 1.25+3.25
         frame = self.cpu.execute_token(othertoken, *args)
-        x = self.cpu.get_latest_value_float(frame, 0)
+        x = self.cpu.get_finish_value_float(frame)
         assert longlong.getrealfloat(x) == 13.5
         assert called == [done_number]
 
@@ -3405,7 +3403,7 @@
         self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
         for inp, outp in [(2,2), (-3, 0)]:
             frame = self.cpu.execute_token(looptoken, inp)
-            assert outp == self.cpu.get_latest_value_int(frame, 0)
+            assert outp == self.cpu.get_finish_value_int(frame)
 
     def test_compile_asmlen(self):
         from pypy.jit.backend.llsupport.llmodel import AbstractLLCPU
@@ -3582,7 +3580,7 @@
             self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
             frame = self.cpu.execute_token(looptoken,
                                            rffi.cast(lltype.Signed, p), 16)
-            result = self.cpu.get_latest_value_int(frame, 0)
+            result = self.cpu.get_finish_value_int(frame)
             assert result == rffi.cast(lltype.Signed, value)
             rawstorage.free_raw_storage(p)
 
@@ -3607,7 +3605,7 @@
             self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
             frame = self.cpu.execute_token(looptoken,
                                            rffi.cast(lltype.Signed, p), 16)
-            result = self.cpu.get_latest_value_float(frame, 0)
+            result = self.cpu.get_finish_value_float(frame)
             result = longlong.getrealfloat(result)
             assert result == rffi.cast(lltype.Float, value)
             rawstorage.free_raw_storage(p)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to