Author: Hakan Ardo <[email protected]>
Branch: jit-usable_retrace_3
Changeset: r60064:06be0d3d5f8a
Date: 2013-01-13 22:03 +0100
http://bitbucket.org/pypy/pypy/changeset/06be0d3d5f8a/
Log: limit number of iterations
diff --git a/pypy/jit/metainterp/test/test_random_loops.py
b/pypy/jit/metainterp/test/test_random_loops.py
--- a/pypy/jit/metainterp/test/test_random_loops.py
+++ b/pypy/jit/metainterp/test/test_random_loops.py
@@ -29,14 +29,19 @@
pass
class RandomLoopBase(object):
- def check(self, bytecode, args=(0,0,0,0,0), **kwargs):
+ def check(self, bytecode, args=(0,0,0,0,0), max_back_jumps=-1, **kwargs):
bytecode = re.subn('\s', '', bytecode)[0]
offsets = self.offsets(bytecode)
+ assert len(args) == 5
+ for n in kwargs.keys():
+ assert n in 'abcde'
+ args = tuple(args) + (max_back_jumps,)
def get_printable_location(pc):
return bytecode[pc]
- myjitdriver = JitDriver(greens = ['pc'], reds = ['a', 'b', 'c', 'd',
'e', 'value', 'prev', 'loop_stack'],
+ myjitdriver = JitDriver(greens = ['pc'], reds = ['max_back_jumps',
'a', 'b', 'c', 'd', 'e',
+ 'value', 'prev',
'loop_stack'],
get_printable_location=get_printable_location)
- def interpreter(_a, _b, _c, _d, _e):
+ def interpreter(_a, _b, _c, _d, _e, max_back_jumps):
pc = 0
value = prev = IntBox(0)
a = IntBox(_a)
@@ -47,7 +52,7 @@
loop_stack = []
while pc < len(bytecode):
myjitdriver.jit_merge_point(pc=pc, a=a, b=b, c=c, d=d, e=e,
value=value, prev=prev,
- loop_stack=loop_stack)
+ loop_stack=loop_stack,
max_back_jumps=max_back_jumps)
op = bytecode[pc]
current = value
@@ -89,8 +94,12 @@
if value.value():
pc -= offsets[pc] - 1
prev = current
+ if max_back_jumps > 0:
+ max_back_jumps -= 1
+ if not max_back_jumps:
+ break
myjitdriver.can_enter_jit(pc=pc, a=a, b=b, c=c, d=d,
e=e, value=value, prev=prev,
- loop_stack=loop_stack)
+ loop_stack=loop_stack,
max_back_jumps=max_back_jumps)
continue
else:
loop_stack.pop()
@@ -134,7 +143,6 @@
return offsets
-
class BaseTests(RandomLoopBase):
def test_basic(self):
self.check('1A2B3C4D5E', a=1, b=2, c=3, d=4, e=5)
@@ -164,5 +172,8 @@
b0= (x)
1}''', a=810)
+ def test_jump_limit(self):
+ self.check('0A{a1+A1}', max_back_jumps=10, a=10)
+
class TestLLtype(BaseTests, LLJitMixin):
pass
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit