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