Author: Hakan Ardo <[email protected]>
Branch: jit-usable_retrace_3
Changeset: r57200:e0dc044a7187
Date: 2012-09-07 07:45 +0200
http://bitbucket.org/pypy/pypy/changeset/e0dc044a7187/
Log: test fallback and some cleanups
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -232,6 +232,8 @@
assert isinstance(target_token, TargetToken)
assert loop_jitcell_token.target_tokens
loop_jitcell_token.target_tokens.append(target_token)
+ if target_token.short_preamble:
+ metainterp_sd.logger_ops.log_short_preamble([],
target_token.short_preamble)
preamble.operations = [orignial_label] + \
[ResOperation(rop.JUMP,
original_target_token.exported_state.jump_args,
@@ -251,15 +253,8 @@
if a1 is not a2:
preamble.operations.append(ResOperation(rop.SAME_AS, [a1], a2))
- #loop.operations = []
-
except InvalidLoop:
- # Fall back on jumping to preamble
- target_token = label.getdescr()
- assert isinstance(target_token, TargetToken)
- assert target_token.exported_state
- target_token.exported_state.generalize_virtual_state = None
- # FIXME: Test
+ original_target_token.short_preamble = original_short_preamble
preamble.operations = [orignial_label] + \
[ResOperation(rop.JUMP, inputargs[:],
None, descr=loop_jitcell_token)]
@@ -267,22 +262,19 @@
try:
optimize_trace(metainterp_sd, preamble,
jitdriver_sd.warmstate.enable_opts,
inline_short_preamble=False)
-
except InvalidLoop:
return None
+ else:
+ target_token = preamble.operations[0].getdescr()
+ assert isinstance(target_token, TargetToken)
+ assert loop_jitcell_token.target_tokens
+ loop_jitcell_token.target_tokens.append(target_token)
trace = partial_trace
trace.operations = partial_trace.operations[:-1] + preamble.operations +
loop.operations
loop = trace # FIXME: rename
assert loop.operations[-1].getopnum() != rop.LABEL
- # FIXME: done above
- target_token = label.getdescr()
- assert isinstance(target_token, TargetToken)
- assert loop_jitcell_token.target_tokens
- loop_jitcell_token.target_tokens.append(target_token) # FIXME: register
all labels
- if target_token.short_preamble:
- metainterp_sd.logger_ops.log_short_preamble([],
target_token.short_preamble)
quasi_immutable_deps = {}
diff --git a/pypy/jit/metainterp/test/test_ajit.py
b/pypy/jit/metainterp/test/test_ajit.py
--- a/pypy/jit/metainterp/test/test_ajit.py
+++ b/pypy/jit/metainterp/test/test_ajit.py
@@ -3064,7 +3064,21 @@
assert res == f(10)
self.check_resops(new_with_vtable=0)
self.check_retraced_simple_loop(2, getfield_gc=0)
-
+
+ def test_retrace_failure_fallback(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n', 'a', 'sa'])
+ def f(n):
+ sa = a = 0
+ while n:
+ a = hint(a, promote=True)
+ myjitdriver.jit_merge_point(n=n, a=a, sa=sa)
+ sa += a
+ n = n - 1
+ if n < 5:
+ a += 1
+
+ res = self.meta_interp(f, [10])
+ assert res == f(10)
class TestOOtype(BasicTests, OOJitMixin):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit