[pypy-commit] pypy stmgc-c7: The point of the 'stm_set_location' operation.
arigo
noreply at buildbot.pypy.org
Sun Apr 20 13:48:04 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r70802:25d8b67514fd
Date: 2014-04-20 13:47 +0200
http://bitbucket.org/pypy/pypy/changeset/25d8b67514fd/
Log: The point of the 'stm_set_location' operation.
diff --git a/rpython/jit/metainterp/optimizeopt/stm.py b/rpython/jit/metainterp/optimizeopt/stm.py
--- a/rpython/jit/metainterp/optimizeopt/stm.py
+++ b/rpython/jit/metainterp/optimizeopt/stm.py
@@ -95,6 +95,12 @@
self.optimizer.stm_location = (num, ref)
self.emit_operation(op)
+ def optimize_STM_SET_LOCATION(self, op):
+ num = op.getarg(0).getint()
+ ref = op.getarg(1).getref_base()
+ self.optimizer.stm_location = (num, ref)
+ self.emit_operation(op)
+
dispatch_opt = make_dispatcher_method(OptSTM, 'optimize_',
default=OptSTM.default_emit)
diff --git a/rpython/jit/metainterp/test/test_stm.py b/rpython/jit/metainterp/test/test_stm.py
--- a/rpython/jit/metainterp/test/test_stm.py
+++ b/rpython/jit/metainterp/test/test_stm.py
@@ -122,6 +122,43 @@
[op] = seen
assert op.getarg(0).getint() == -42
+ def test_stm_report_location_2(self):
+ myjitdriver = JitDriver(greens = ['a', 'r'], reds = ['x', 'res', 'n'],
+ stm_report_location = [0, 1])
+ class Code(object):
+ pass
+ def g(a, r, x, n):
+ res = 0
+ while x > 0:
+ myjitdriver.jit_merge_point(a=a, r=r, x=x, res=res, n=n)
+ res += x
+ x -= 1
+ a = -a
+ if n & 1:
+ pass # sub-bridge of this bridge
+ return res
+ def main(a, x):
+ r = Code()
+ res = -1
+ n = 7
+ while n > 0:
+ res = g(a, r, x, n)
+ n -= 1
+ return res
+ res = self.meta_interp(main, [42, 10], translationoptions={"stm":True})
+ assert res == 55
+ self.check_resops(debug_merge_point=6)
+ #
+ from rpython.jit.metainterp.warmspot import get_stats
+ seen = []
+ for loop in get_stats().get_all_loops():
+ for op in loop._all_operations():
+ if op.getopname() == "stm_set_location":
+ seen.append(op)
+ [op1, op2] = seen
+ assert op1.getarg(0).getint() == -42
+ assert op2.getarg(0).getint() == -42
+
class TestLLtype(STMTests, LLJitMixin):
pass
More information about the pypy-commit
mailing list