Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r58316:9e8ff9145588
Date: 2012-10-21 15:38 +0200
http://bitbucket.org/pypy/pypy/changeset/9e8ff9145588/
Log: Test and fix 2.
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
@@ -872,26 +872,26 @@
return support.cast_result(descr.RESULT, result)
def execute_call_assembler(self, descr, *args):
- 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:
- result = assembler_helper_ptr(frame)
- except LLException, lle:
- assert self.last_exception is None, "exception left behind"
- self.last_exception = lle
- if self.current_op.result is not None:
- return _example_res[self.current_op.result.type]
- return None
+ frame = self.cpu._execute_token(descr, *args)
+ if frame._execution_finished_normally: # fast path
+ result = frame.finish_value
+ else:
+ jd = descr.outermost_jitdriver_sd
+ assembler_helper_ptr = jd.assembler_helper_adr.ptr # fish
+ try:
+ result = assembler_helper_ptr(frame)
+ except LLException, lle:
+ assert self.last_exception is None, "exception left behind"
+ self.last_exception = lle
+ 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
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
@@ -2885,6 +2885,15 @@
FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
llmemory.GCREF))
+
+ def func2(jitframe1):
+ called.append(self.cpu.get_latest_descr(jitframe1))
+ FPTR2 = lltype.Ptr(lltype.FuncType([llmemory.GCREF], lltype.Void))
+ fptr2 = llhelper(FPTR2, func2)
+ calldescr2 = self.cpu.calldescrof(FPTR2.TO, FPTR2.TO.ARGS,
+ FPTR2.TO.RESULT,
+ EffectInfo.MOST_GENERAL)
+
class FakeJitDriverSD:
_assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
assembler_helper_adr = llmemory.cast_ptr_to_adr(
@@ -2892,8 +2901,9 @@
ops = '''
[p0]
+ call(ConstClass(fptr2), p0, descr=calldescr2)
finish(p0) []'''
- loop = parse(ops)
+ loop = parse(ops, namespace=locals())
# not a fast_path finish!
looptoken = JitCellToken()
looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
@@ -2918,7 +2928,7 @@
frame = self.cpu.execute_token(othertoken)
assert not self.cpu.get_finish_value_ref(frame)
- assert called == [foodescr]
+ assert called == [foodescr] * 2
def test_raw_malloced_getarrayitem(self):
ARRAY = rffi.CArray(lltype.Signed)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit