Author: Hakan Ardo <ha...@debian.org> Branch: jit-targets Changeset: r48784:c6d704e0080f Date: 2011-11-05 16:21 +0100 http://bitbucket.org/pypy/pypy/changeset/c6d704e0080f/
Log: count all operations in each test diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py --- a/pypy/jit/metainterp/history.py +++ b/pypy/jit/metainterp/history.py @@ -1023,12 +1023,9 @@ "found %d %r, expected %d" % (found, insn, expected_count)) return insns - def check_loops(self, expected=None, everywhere=False, **check): + def check_resops(self, expected=None, **check): insns = {} for loop in self.loops: - if not everywhere: - if getattr(loop, '_ignore_during_counting', False): - continue insns = loop.summary(adding_insns=insns) if expected is not None: insns.pop('debug_merge_point', None) @@ -1039,6 +1036,36 @@ assert found == expected_count, ( "found %d %r, expected %d" % (found, insn, expected_count)) return insns + + def check_loops(self, expected=None, everywhere=False, **check): + insns = {} + for loop in self.loops: + #if not everywhere: + # if getattr(loop, '_ignore_during_counting', False): + # continue + insns = loop.summary(adding_insns=insns) + if expected is not None: + insns.pop('debug_merge_point', None) + print + print + print " self.check_resops(%s)" % str(insns) + print + import pdb; pdb.set_trace() + else: + chk = ['%s=%d' % (i, insns.get(i, 0)) for i in check] + print + print + print " self.check_resops(%s)" % ', '.join(chk) + print + import pdb; pdb.set_trace() + return + + for insn, expected_count in check.items(): + getattr(rop, insn.upper()) # fails if 'rop.INSN' does not exist + found = insns.get(insn, 0) + assert found == expected_count, ( + "found %d %r, expected %d" % (found, insn, expected_count)) + return insns def check_consistency(self): "NOT_RPYTHON" diff --git a/pypy/jit/metainterp/test/support.py b/pypy/jit/metainterp/test/support.py --- a/pypy/jit/metainterp/test/support.py +++ b/pypy/jit/metainterp/test/support.py @@ -155,9 +155,13 @@ class JitMixin: basic = True + def check_resops(self, expected=None, **check): + get_stats().check_resops(expected=expected, **check) + + def check_loops(self, expected=None, everywhere=False, **check): get_stats().check_loops(expected=expected, everywhere=everywhere, - **check) + **check) def check_loop_count(self, count): """NB. This is a hack; use check_tree_loop_count() or check_enter_count() for the real thing. 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 @@ -79,9 +79,8 @@ res = self.meta_interp(f, [6, 7]) assert res == 42 self.check_loop_count(1) - self.check_loops({'guard_true': 1, - 'int_add': 1, 'int_sub': 1, 'int_gt': 1, - 'jump': 1}) + self.check_resops({'jump': 2, 'int_gt': 2, 'int_add': 2, 'guard_true': 2, 'int_sub': 2}) + if self.basic: found = 0 for op in get_stats().loops[0]._all_operations(): @@ -108,7 +107,7 @@ res = self.meta_interp(f, [6, 7]) assert res == 1323 self.check_loop_count(1) - self.check_loops(int_mul=1) + self.check_resops(int_mul=3) def test_loop_variant_mul_ovf(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x']) @@ -125,7 +124,7 @@ res = self.meta_interp(f, [6, 7]) assert res == 1323 self.check_loop_count(1) - self.check_loops(int_mul_ovf=1) + self.check_resops(int_mul_ovf=3) def test_loop_invariant_mul1(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x']) @@ -140,9 +139,9 @@ res = self.meta_interp(f, [6, 7]) assert res == 252 self.check_loop_count(1) - self.check_loops({'guard_true': 1, - 'int_add': 1, 'int_sub': 1, 'int_gt': 1, - 'jump': 1}) + self.check_resops({'jump': 2, 'int_gt': 2, 'int_add': 2, + 'int_mul': 1, 'guard_true': 2, 'int_sub': 2}) + def test_loop_invariant_mul_ovf(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x']) @@ -158,10 +157,10 @@ res = self.meta_interp(f, [6, 7]) assert res == 308 self.check_loop_count(1) - self.check_loops({'guard_true': 1, - 'int_add': 2, 'int_sub': 1, 'int_gt': 1, - 'int_lshift': 1, - 'jump': 1}) + self.check_resops({'jump': 2, 'int_lshift': 2, 'int_gt': 2, + 'int_mul_ovf': 1, 'int_add': 4, + 'guard_true': 2, 'guard_no_overflow': 1, + 'int_sub': 2}) def test_loop_invariant_mul_bridge1(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x']) @@ -194,11 +193,9 @@ res = self.meta_interp(f, [6, 32]) assert res == 1167 self.check_loop_count(3) - self.check_loops({'int_add': 3, 'int_lt': 2, - 'int_sub': 2, 'guard_false': 1, - 'jump': 2, - 'int_gt': 1, 'guard_true': 2}) - + self.check_resops({'int_lt': 3, 'int_gt': 2, 'int_add': 5, + 'guard_true': 3, 'int_sub': 4, 'jump': 4, + 'int_mul': 2, 'guard_false': 2}) def test_loop_invariant_mul_bridge_maintaining2(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x']) @@ -216,10 +213,9 @@ res = self.meta_interp(f, [6, 32]) assert res == 1692 self.check_loop_count(3) - self.check_loops({'int_add': 3, 'int_lt': 2, - 'int_sub': 2, 'guard_false': 1, - 'jump': 2, - 'int_gt': 1, 'guard_true': 2}) + self.check_resops({'int_lt': 3, 'int_gt': 2, 'int_add': 5, + 'guard_true': 3, 'int_sub': 4, 'jump': 4, + 'int_mul': 2, 'guard_false': 2}) def test_loop_invariant_mul_bridge_maintaining3(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x', 'm']) @@ -237,10 +233,9 @@ res = self.meta_interp(f, [6, 32, 16]) assert res == 1692 self.check_loop_count(3) - self.check_loops({'int_add': 2, 'int_lt': 1, - 'int_sub': 2, 'guard_false': 1, - 'jump': 2, 'int_mul': 1, - 'int_gt': 2, 'guard_true': 2}) + self.check_resops({'int_lt': 2, 'int_gt': 4, 'guard_false': 2, + 'guard_true': 4, 'int_sub': 4, 'jump': 4, + 'int_mul': 3, 'int_add': 4}) def test_loop_invariant_intbox(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x']) @@ -261,9 +256,9 @@ res = self.meta_interp(f, [6, 7]) assert res == 252 self.check_loop_count(1) - self.check_loops({'guard_true': 1, - 'int_add': 1, 'int_sub': 1, 'int_gt': 1, - 'jump': 1}) + self.check_resops({'jump': 2, 'int_gt': 2, 'int_add': 2, + 'getfield_gc_pure': 1, 'int_mul': 1, + 'guard_true': 2, 'int_sub': 2}) def test_loops_are_transient(self): import gc, weakref @@ -381,7 +376,7 @@ assert res == 0 # CALL_PURE is recorded in the history, but turned into a CALL # by optimizeopt.py - self.check_loops(int_sub=0, call=1, call_pure=0) + self.check_resops(call_pure=0, call=2, int_sub=0) def test_constfold_call_elidable(self): myjitdriver = JitDriver(greens = ['m'], reds = ['n']) @@ -397,7 +392,7 @@ res = self.meta_interp(f, [21, 5]) assert res == -1 # the CALL_PURE is constant-folded away by optimizeopt.py - self.check_loops(int_sub=1, call=0, call_pure=0) + self.check_resops(call_pure=0, call=0, int_sub=2) def test_constfold_call_elidable_2(self): myjitdriver = JitDriver(greens = ['m'], reds = ['n']) @@ -417,7 +412,7 @@ res = self.meta_interp(f, [21, 5]) assert res == -1 # the CALL_PURE is constant-folded away by optimizeopt.py - self.check_loops(int_sub=1, call=0, call_pure=0) + self.check_resops(call_pure=0, call=0, int_sub=2) def test_elidable_function_returning_object(self): myjitdriver = JitDriver(greens = ['m'], reds = ['n']) @@ -442,7 +437,7 @@ res = self.meta_interp(f, [21, 5]) assert res == -1 # the CALL_PURE is constant-folded away by optimizeopt.py - self.check_loops(int_sub=1, call=0, call_pure=0, getfield_gc=0) + self.check_resops(call_pure=0, call=0, getfield_gc=1, int_sub=2) def test_elidable_raising(self): myjitdriver = JitDriver(greens = ['m'], reds = ['n']) @@ -463,12 +458,12 @@ res = self.meta_interp(f, [22, 6]) assert res == -3 # the CALL_PURE is constant-folded away during tracing - self.check_loops(int_sub=1, call=0, call_pure=0) + self.check_resops(call_pure=0, call=0, int_sub=2) # res = self.meta_interp(f, [22, -5]) assert res == 0 # raises: becomes CALL and is not constant-folded away - self.check_loops(int_sub=1, call=1, call_pure=0) + self.check_resops(call_pure=0, call=2, int_sub=2) def test_elidable_raising_2(self): myjitdriver = JitDriver(greens = ['m'], reds = ['n']) @@ -489,12 +484,12 @@ res = self.meta_interp(f, [22, 6]) assert res == -3 # the CALL_PURE is constant-folded away by optimizeopt.py - self.check_loops(int_sub=1, call=0, call_pure=0) + self.check_resops(call_pure=0, call=0, int_sub=2) # res = self.meta_interp(f, [22, -5]) assert res == 0 # raises: becomes CALL and is not constant-folded away - self.check_loops(int_sub=1, call=1, call_pure=0) + self.check_resops(call_pure=0, call=2, int_sub=2) def test_constant_across_mp(self): myjitdriver = JitDriver(greens = [], reds = ['n']) @@ -533,7 +528,7 @@ policy = StopAtXPolicy(externfn) res = self.meta_interp(f, [31], policy=policy) assert res == 42 - self.check_loops(int_mul=1, int_mod=0) + self.check_resops(int_mul=2, int_mod=0) def test_we_are_jitted(self): myjitdriver = JitDriver(greens = [], reds = ['y']) @@ -835,7 +830,7 @@ return n res = self.meta_interp(f, [20, 1, 2]) assert res == 0 - self.check_loops(call=0) + self.check_resops(call=0) def test_abs(self): myjitdriver = JitDriver(greens = [], reds = ['i', 't']) @@ -865,9 +860,8 @@ res = self.meta_interp(f, [6, 7]) assert res == 42.0 self.check_loop_count(1) - self.check_loops({'guard_true': 1, - 'float_add': 1, 'float_sub': 1, 'float_gt': 1, - 'jump': 1}) + self.check_resops({'jump': 2, 'float_gt': 2, 'float_add': 2, + 'float_sub': 2, 'guard_true': 2}) def test_print(self): myjitdriver = JitDriver(greens = [], reds = ['n']) @@ -1038,7 +1032,7 @@ return x res = self.meta_interp(f, [20], enable_opts='') assert res == f(20) - self.check_loops(call=0) + self.check_resops(call=0) def test_zerodivisionerror(self): # test the case of exception-raising operation that is not delegated @@ -1348,7 +1342,7 @@ res = self.meta_interp(f, [6, 7]) assert res == 42 self.check_loop_count(1) - self.check_loops(call=1) + self.check_resops(call=2) def test_merge_guardclass_guardvalue(self): from pypy.rlib.objectmodel import instantiate @@ -1375,8 +1369,7 @@ return x res = self.meta_interp(f, [299], listops=True) assert res == f(299) - self.check_loops(guard_class=0, guard_value=3) - self.check_loops(guard_class=0, guard_value=6, everywhere=True) + self.check_resops(guard_class=0, guard_value=6) def test_merge_guardnonnull_guardclass(self): from pypy.rlib.objectmodel import instantiate @@ -1404,11 +1397,9 @@ return x res = self.meta_interp(f, [299], listops=True) assert res == f(299) - self.check_loops(guard_class=0, guard_nonnull=2, - guard_nonnull_class=2, guard_isnull=1) - self.check_loops(guard_class=0, guard_nonnull=4, - guard_nonnull_class=4, guard_isnull=2, - everywhere=True) + self.check_resops(guard_class=0, guard_nonnull=4, + guard_nonnull_class=4, guard_isnull=2) + def test_merge_guardnonnull_guardvalue(self): from pypy.rlib.objectmodel import instantiate @@ -1435,11 +1426,9 @@ return x res = self.meta_interp(f, [299], listops=True) assert res == f(299) - self.check_loops(guard_class=0, guard_nonnull=2, guard_value=2, - guard_nonnull_class=0, guard_isnull=1) - self.check_loops(guard_class=0, guard_nonnull=4, guard_value=4, - guard_nonnull_class=0, guard_isnull=2, - everywhere=True) + self.check_resops(guard_value=4, guard_class=0, guard_nonnull=4, + guard_nonnull_class=0, guard_isnull=2) + def test_merge_guardnonnull_guardvalue_2(self): from pypy.rlib.objectmodel import instantiate @@ -1466,11 +1455,9 @@ return x res = self.meta_interp(f, [299], listops=True) assert res == f(299) - self.check_loops(guard_class=0, guard_nonnull=2, guard_value=2, - guard_nonnull_class=0, guard_isnull=1) - self.check_loops(guard_class=0, guard_nonnull=4, guard_value=4, - guard_nonnull_class=0, guard_isnull=2, - everywhere=True) + self.check_resops(guard_value=4, guard_class=0, guard_nonnull=4, + guard_nonnull_class=0, guard_isnull=2) + def test_merge_guardnonnull_guardclass_guardvalue(self): from pypy.rlib.objectmodel import instantiate @@ -1500,11 +1487,9 @@ return x res = self.meta_interp(f, [399], listops=True) assert res == f(399) - self.check_loops(guard_class=0, guard_nonnull=3, guard_value=3, - guard_nonnull_class=0, guard_isnull=1) - self.check_loops(guard_class=0, guard_nonnull=6, guard_value=6, - guard_nonnull_class=0, guard_isnull=2, - everywhere=True) + self.check_resops(guard_class=0, guard_nonnull=6, guard_value=6, + guard_nonnull_class=0, guard_isnull=2) + def test_residual_call_doesnt_lose_info(self): myjitdriver = JitDriver(greens = [], reds = ['x', 'y', 'l']) @@ -1530,8 +1515,7 @@ y.v = g(y.v) - y.v/y.v + lc/l[0] - 1 return y.v res = self.meta_interp(f, [20], listops=True) - self.check_loops(getfield_gc=0, getarrayitem_gc=0) - self.check_loops(getfield_gc=1, getarrayitem_gc=0, everywhere=True) + self.check_resops(getarrayitem_gc=0, getfield_gc=1) def test_guard_isnull_nonnull(self): myjitdriver = JitDriver(greens = [], reds = ['x', 'res']) @@ -1559,7 +1543,7 @@ return res res = self.meta_interp(f, [21]) assert res == 42 - self.check_loops(guard_nonnull=1, guard_isnull=1) + self.check_resops(guard_nonnull=2, guard_isnull=2) def test_loop_invariant1(self): myjitdriver = JitDriver(greens = [], reds = ['x', 'res']) @@ -1586,8 +1570,7 @@ return res res = self.meta_interp(g, [21]) assert res == 3 * 21 - self.check_loops(call=0) - self.check_loops(call=1, everywhere=True) + self.check_resops(call=1) def test_bug_optimizeopt_mutates_ops(self): myjitdriver = JitDriver(greens = [], reds = ['x', 'res', 'const', 'a']) @@ -1707,7 +1690,7 @@ return x res = self.meta_interp(f, [8]) assert res == 0 - self.check_loops(jit_debug=2) + self.check_resops(jit_debug=4) def test_assert_green(self): def f(x, promote_flag): @@ -1749,9 +1732,10 @@ res = self.meta_interp(g, [6, 7]) assert res == 6*8 + 6**8 self.check_loop_count(5) - self.check_loops({'guard_true': 2, - 'int_add': 1, 'int_mul': 1, 'int_sub': 2, - 'int_gt': 2, 'jump': 2}) + self.check_resops({'guard_class': 2, 'int_gt': 4, + 'getfield_gc': 4, 'guard_true': 4, + 'int_sub': 4, 'jump': 4, 'int_mul': 2, + 'int_add': 2}) def test_multiple_specialied_versions_array(self): myjitdriver = JitDriver(greens = [], reds = ['idx', 'y', 'x', 'res', @@ -1792,7 +1776,7 @@ res = self.meta_interp(g, [6, 14]) assert res == g(6, 14) self.check_loop_count(9) - self.check_loops(getarrayitem_gc=8, everywhere=True) + self.check_resops(getarrayitem_gc=8) def test_multiple_specialied_versions_bridge(self): myjitdriver = JitDriver(greens = [], reds = ['y', 'x', 'z', 'res']) @@ -1980,8 +1964,8 @@ res = self.meta_interp(g, [3, 23]) assert res == 7068153 self.check_loop_count(7) - self.check_loops(guard_true=4, guard_class=0, int_add=2, int_mul=2, - guard_false=2) + self.check_resops(guard_true=6, guard_class=2, int_mul=3, + int_add=3, guard_false=3) def test_dont_trace_every_iteration(self): myjitdriver = JitDriver(greens = [], reds = ['a', 'b', 'i', 'sa']) @@ -2225,27 +2209,27 @@ return sa assert self.meta_interp(f1, [5, 5]) == 50 - self.check_loops(int_rshift=0, everywhere=True) + self.check_resops(int_rshift=0) for f in (f1, f2): assert self.meta_interp(f, [5, 6]) == 50 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) assert self.meta_interp(f, [10, 5]) == 100 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) assert self.meta_interp(f, [10, 6]) == 100 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) assert self.meta_interp(f, [5, 31]) == 0 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) bigval = 1 while (bigval << 3).__class__ is int: bigval = bigval << 1 assert self.meta_interp(f, [bigval, 5]) == 0 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) def test_overflowing_shift_neg(self): myjitdriver = JitDriver(greens = [], reds = ['a', 'b', 'n', 'sa']) @@ -2270,27 +2254,27 @@ return sa assert self.meta_interp(f1, [-5, 5]) == -50 - self.check_loops(int_rshift=0, everywhere=True) + self.check_resops(int_rshift=0) for f in (f1, f2): assert self.meta_interp(f, [-5, 6]) == -50 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) assert self.meta_interp(f, [-10, 5]) == -100 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) assert self.meta_interp(f, [-10, 6]) == -100 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) assert self.meta_interp(f, [-5, 31]) == 0 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) bigval = 1 while (bigval << 3).__class__ is int: bigval = bigval << 1 assert self.meta_interp(f, [bigval, 5]) == 0 - self.check_loops(int_rshift=3, everywhere=True) + self.check_resops(int_rshift=3) def test_pure_op_not_to_be_propagated(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'sa']) @@ -2430,8 +2414,7 @@ if counter > 10: return 7 assert self.meta_interp(build, []) == 7 - self.check_loops(getfield_gc_pure=0) - self.check_loops(getfield_gc_pure=2, everywhere=True) + self.check_resops(getfield_gc_pure=2) def test_args_becomming_equal(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'a', 'b']) @@ -2564,7 +2547,7 @@ i += 1 return sa assert self.meta_interp(f, [20]) == f(20) - self.check_loops(int_gt=1, int_lt=2, int_ge=0, int_le=0) + self.check_resops(int_lt=4, int_le=0, int_ge=0, int_gt=2) def test_intbounds_not_generalized1(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa']) @@ -2581,7 +2564,8 @@ i += 1 return sa assert self.meta_interp(f, [20]) == f(20) - self.check_loops(int_gt=1, int_lt=3, int_ge=2, int_le=1) + self.check_resops(int_lt=6, int_le=2, int_ge=4, int_gt=3) + def test_intbounds_not_generalized2(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'node']) @@ -2601,7 +2585,7 @@ i += 1 return sa assert self.meta_interp(f, [20]) == f(20) - self.check_loops(int_gt=1, int_lt=2, int_ge=1, int_le=1) + self.check_resops(int_lt=4, int_le=3, int_ge=3, int_gt=2) def test_retrace_limit1(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'a']) @@ -2855,7 +2839,7 @@ return a[0].intvalue res = self.meta_interp(f, [100]) assert res == -2 - #self.check_loops(getarrayitem_gc=0, setarrayitem_gc=0) -- xxx? + self.check_resops(setarrayitem_gc=2, getarrayitem_gc=1) def test_retrace_ending_up_retracing_another_loop(self): @@ -2955,7 +2939,7 @@ i += 1 res = self.meta_interp(f, [32]) assert res == f(32) - self.check_loops(arraylen_gc=2) + self.check_resops(arraylen_gc=3) def test_ulonglong_mod(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'sa', 'i']) @@ -3142,9 +3126,9 @@ a = A(a.i + 1) self.meta_interp(f, []) - self.check_loops(new_with_vtable=0) + self.check_resops(new_with_vtable=0) self.meta_interp(f, [], enable_opts='') - self.check_loops(new_with_vtable=1) + self.check_resops(new_with_vtable=1) def test_two_loopinvariant_arrays1(self): from pypy.rpython.lltypesystem import lltype, llmemory, rffi @@ -3236,7 +3220,7 @@ return sa res = self.meta_interp(f, [32]) assert res == f(32) - self.check_loops(arraylen_gc=2, everywhere=True) + self.check_resops(arraylen_gc=2) def test_release_gil_flush_heap_cache(self): if sys.platform == "win32": @@ -3273,7 +3257,7 @@ lock.release() return n res = self.meta_interp(f, [10, 1]) - self.check_loops(getfield_gc=2) + self.check_resops(getfield_gc=4) assert res == f(10, 1) def test_jit_merge_point_with_raw_pointer(self): @@ -3337,10 +3321,10 @@ res = self.meta_interp(main, [0, 10, 2], enable_opts='') assert res == main(0, 10, 2) - self.check_loops(call=1) + self.check_resops(call=1) res = self.meta_interp(main, [1, 10, 2], enable_opts='') assert res == main(1, 10, 2) - self.check_loops(call=0) + self.check_resops(call=0) def test_look_inside_iff_virtual(self): # There's no good reason for this to be look_inside_iff, but it's a test! @@ -3365,10 +3349,10 @@ i += f(A(2), n) res = self.meta_interp(main, [0], enable_opts='') assert res == main(0) - self.check_loops(call=1, getfield_gc=0) + self.check_resops(call=1, getfield_gc=0) res = self.meta_interp(main, [1], enable_opts='') assert res == main(1) - self.check_loops(call=0, getfield_gc=0) + self.check_resops(call=0, getfield_gc=0) def test_reuse_elidable_result(self): driver = JitDriver(reds=['n', 's'], greens = []) @@ -3381,10 +3365,9 @@ return s res = self.meta_interp(main, [10]) assert res == main(10) - self.check_loops({ - 'call': 1, 'guard_no_exception': 1, 'guard_true': 1, 'int_add': 2, - 'int_gt': 1, 'int_sub': 1, 'strlen': 1, 'jump': 1, - }) + self.check_resops({'int_gt': 2, 'strlen': 2, 'guard_true': 2, + 'int_sub': 2, 'jump': 2, 'call': 2, + 'guard_no_exception': 2, 'int_add': 4}) def test_look_inside_iff_const_getarrayitem_gc_pure(self): driver = JitDriver(greens=['unroll'], reds=['s', 'n']) @@ -3416,10 +3399,10 @@ res = self.meta_interp(main, [0, 10]) assert res == main(0, 10) # 2 calls, one for f() and one for char_mul - self.check_loops(call=2) + self.check_resops(call=4) res = self.meta_interp(main, [1, 10]) assert res == main(1, 10) - self.check_loops(call=0) + self.check_resops(call=0) def test_setarrayitem_followed_by_arraycopy(self): myjitdriver = JitDriver(greens = [], reds = ['n', 'sa', 'x', 'y']) @@ -3520,7 +3503,8 @@ res = self.meta_interp(f, [10]) assert res == 0 - self.check_loops({"int_sub": 1, "int_gt": 1, "guard_true": 1, "jump": 1}) + self.check_resops({'jump': 2, 'guard_true': 2, 'int_gt': 2, + 'int_sub': 2}) def test_virtual_opaque_ptr(self): myjitdriver = JitDriver(greens = [], reds = ["n"]) @@ -3539,7 +3523,9 @@ return n res = self.meta_interp(f, [10]) assert res == 0 - self.check_loops({"int_sub": 1, "int_gt": 1, "guard_true": 1, "jump": 1}) + self.check_resops({'jump': 2, 'guard_true': 2, 'int_gt': 2, + 'int_sub': 2}) + def test_virtual_opaque_dict(self): myjitdriver = JitDriver(greens = [], reds = ["n"]) @@ -3559,7 +3545,10 @@ return n res = self.meta_interp(f, [10]) assert res == 0 - self.check_loops({"int_sub": 1, "int_gt": 1, "guard_true": 1, "jump": 1}) + self.check_resops({'int_gt': 2, 'getfield_gc': 1, 'int_eq': 1, + 'guard_true': 2, 'int_sub': 2, 'jump': 2, + 'guard_false': 1}) + def test_convert_from_SmallFunctionSetPBCRepr_to_FunctionsPBCRepr(self): f1 = lambda n: n+1 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit