[pypy-commit] pypy jit-targets: count all operations in each test
hakanardo
noreply at buildbot.pypy.org
Sat Nov 5 16:21:33 CET 2011
Author: Hakan Ardo <hakan at 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
More information about the pypy-commit
mailing list