aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2018-12-01 19:46:44 +0200
committerArmin Rigo <arigo@tunes.org>2018-12-01 19:46:44 +0200
commit0ca31e850664aee1beada9c4b3d1a4dd3e6a6fe4 (patch)
tree318dd4d675c18f05f8fcceccd97740ccb2932048 /rpython/jit
parentmerge expose-gc-time: (diff)
downloadpypy-0ca31e850664aee1beada9c4b3d1a4dd3e6a6fe4.tar.gz
pypy-0ca31e850664aee1beada9c4b3d1a4dd3e6a6fe4.tar.bz2
pypy-0ca31e850664aee1beada9c4b3d1a4dd3e6a6fe4.zip
*Finally* managed to write a test from issue2904
Diffstat (limited to 'rpython/jit')
-rw-r--r--rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py102
-rw-r--r--rpython/jit/metainterp/test/test_ajit.py33
2 files changed, 41 insertions, 94 deletions
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
index 0201ba1810..b89cbae577 100644
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -74,7 +74,7 @@ class BaseTestWithUnroll(BaseTest):
print "Loop:"
print '\n'.join([str(o) for o in loop.operations])
print
- if expected_short:
+ if expected_short or getattr(info, 'short_preamble', None):
print "Short Preamble:"
short = info.short_preamble
print '\n'.join([str(o) for o in short])
@@ -9502,113 +9502,27 @@ class OptimizeOptTest(BaseTestWithUnroll):
def test_issue2904(self):
py.test.skip("XXX issue 2904")
ops = """
- [p0, p1, p2, p3, p4, i5, p6, i7, p8, p9, p10, p11, p12, p13]
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #36 LOAD_FAST')
- guard_value(i5, 4) []
- guard_isnull(p3) []
- guard_nonnull(p11) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #39 LOAD_CONST')
- guard_value(p2, ConstPtr(myptr)) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #42 COMPARE_OP')
- guard_class(p11, ConstClass(intobj_immut_vtable)) []
+ [p8, p10, p11]
i17 = getfield_gc_i(p11, descr=immut_intval)
i19 = int_gt(i17, 0)
guard_false(i19) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #45 POP_JUMP_IF_FALSE')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #71 POP_BLOCK')
- p20 = getfield_gc_r(p4, descr=nextdescr3)
- i21 = getfield_gc_i(p4, descr=valuedescr3)
- guard_value(i21, 4) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #72 LOAD_FAST')
- guard_nonnull(p10) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #75 LOAD_CONST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #78 INPLACE_ADD')
- guard_class(p10, ConstClass(intobj_immut_vtable)) []
i24 = getfield_gc_i(p10, descr=immut_intval)
- i26 = int_add_ovf(i24, 1)
- guard_no_overflow() []
+ i26 = int_add(i24, 1)
p27 = new_with_vtable(descr=immut_descr)
setfield_gc(p27, i26, descr=immut_intval)
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #79 STORE_FAST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #82 JUMP_ABSOLUTE')
- quasiimmut_field(ConstPtr(quasiptr), descr=quasiimmutdescr)
- guard_not_invalidated() []
- i30 = getfield_raw_i(140031323711392, descr=adescr)
- i32 = int_lt(i30, 0)
- guard_false(i32) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #15 LOAD_FAST')
- p34 = same_as_r(ConstPtr(tupleaddr))
- p36 = same_as_r(ConstPtr(nullptr))
- i38 = same_as_i(4)
- i40 = same_as_i(15)
- p42 = same_as_r(ConstPtr(nullptr))
- p44 = same_as_r(ConstPtr(nullptr))
- guard_future_condition() []
- guard_value(i38, 4) []
- guard_isnull(p36) []
- guard_nonnull(p27) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #18 LOAD_CONST')
- guard_value(p34, ConstPtr(tupleaddr)) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #21 COMPARE_OP')
- guard_class(p27, ConstClass(intobj_immut_vtable)) []
- i48 = getfield_gc_i(p27, descr=immut_intval)
- i50 = int_lt(i48, 60000)
- guard_true(i50) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #24 POP_JUMP_IF_FALSE')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #27 LOAD_FAST')
- guard_nonnull(p8) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #30 STORE_FAST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #33 SETUP_LOOP')
- p51 = new_with_vtable(descr=nodesize)
- setfield_gc(p51, 72, descr=valuedescr3)
- setfield_gc(p51, 4, descr=immut_intval)
- setfield_gc(p51, p20, descr=nextdescr3)
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #36 LOAD_FAST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #39 LOAD_CONST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #42 COMPARE_OP')
- guard_class(p8, ConstClass(intobj_immut_vtable)) []
+ i50 = int_ge(i26, 60000)
+ guard_false(i50) []
i55 = getfield_gc_i(p8, descr=immut_intval)
i57 = int_gt(i55, 0)
guard_true(i57) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #45 POP_JUMP_IF_FALSE')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #48 LOAD_FAST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #51 LOAD_CONST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #54 INPLACE_SUBTRACT')
- i59 = int_sub_ovf(i55, 1)
- guard_no_overflow() []
+ i59 = int_sub(i55, 1)
p60 = new_with_vtable(descr=immut_descr)
setfield_gc(p60, i59, descr=immut_intval)
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #55 STORE_FAST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #58 LOAD_FAST')
- guard_nonnull(p9) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #61 LOAD_CONST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #64 INPLACE_ADD')
- guard_class(p9, ConstClass(intobj_immut_vtable)) []
- i62 = getfield_gc_i(p9, descr=immut_intval)
- i64 = int_add_ovf(i62, 1)
- guard_no_overflow() []
- p65 = new_with_vtable(descr=immut_descr)
- setfield_gc(p65, i64, descr=immut_intval)
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #65 STORE_FAST')
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #68 JUMP_ABSOLUTE')
- quasiimmut_field(ConstPtr(quasiptr), descr=quasiimmutdescr)
- guard_not_invalidated() []
- i68 = getfield_raw_i(140031323711392, descr=adescr)
- i70 = int_lt(i68, 0)
- guard_false(i70) []
- debug_merge_point(0, 0, '<code object f. file 'z.py'. line 4> #36 LOAD_FAST')
- p72 = same_as_r(ConstPtr(myptr))
- p74 = same_as_r(ConstPtr(nullptr))
- i76 = same_as_i(4)
- i78 = same_as_i(36)
- p80 = same_as_r(ConstPtr(nullptr))
- p82 = same_as_r(ConstPtr(nullptr))
- guard_future_condition() []
- jump(p0, p1, p72, p74, p51, i76, p6, i78, p8, p65, p27, p60, p80, p82, descr=<Loop-1>)
+ jump(p8, p27, p60, descr=<Loop-1>)
"""
# expected = a loop that does NOT end up passing the constant 0 in the final jump()
self.optimize_loop(ops, ops,
- jump_values=[None] * 14)
+ jump_values=[None] * 3)
class TestLLtype(OptimizeOptTest, LLtypeMixin):
pass
diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py
index 32408a6846..c3d87e354b 100644
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -4732,3 +4732,36 @@ class TestLLtype(BaseLLtypeTests, LLJitMixin):
res = self.meta_interp(f, [2, 200])
assert res == f(2, 200)
+
+ def test_issue2904(self):
+ driver = JitDriver(greens = [],
+ reds=['iterations', 'total', 'c', 'height', 'h'])
+
+ class IntVal:
+ _immutable_fields_ = ['intval']
+ def __init__(self, value):
+ self.intval = value
+
+ def f(height, iterations):
+ set_param(driver, 'threshold', 4)
+ set_param(driver, 'trace_eagerness', 1)
+ height = IntVal(height)
+ c = 0
+ h = height
+ total = 0
+
+ while True:
+ driver.jit_merge_point(iterations=iterations,
+ total=total, c=c, height=height, h=h)
+ if h.intval > 0:
+ h = IntVal(h.intval - 1)
+ total = total + 1
+ else:
+ c = c + 1
+ if c >= iterations:
+ return total
+ assert height.intval > 0
+ h = IntVal(height.intval - 1)
+
+ res = self.meta_interp(f, [2, 200])
+ assert res == f(2, 200)