Author: Armin Rigo <[email protected]>
Branch: stmgc-c7
Changeset: r70810:906accbe3114
Date: 2014-04-20 13:54 +0200
http://bitbucket.org/pypy/pypy/changeset/906accbe3114/
Log: Emit stm_set_location just after the relevant debug_merge_points
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
@@ -1,7 +1,7 @@
from rpython.jit.metainterp.optimizeopt.optimizer import (Optimization, )
from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
from rpython.jit.codewriter.effectinfo import EffectInfo
-from rpython.jit.metainterp.resoperation import rop
+from rpython.jit.metainterp.resoperation import rop, ResOperation
class OptSTM(Optimization):
"""
@@ -85,15 +85,17 @@
self.emit_operation(op)
def optimize_DEBUG_MERGE_POINT(self, op):
+ self.emit_operation(op)
jdindex = op.getarg(0).getint()
jd = self.optimizer.metainterp_sd.warmrunnerdesc.jitdrivers_sd[jdindex]
report_location = jd.stm_report_location
if report_location is not None:
idx_num, idx_ref = report_location
- num = op.getarg(3 + idx_num).getint()
- ref = op.getarg(3 + idx_ref).getref_base()
- self.optimizer.stm_location = (num, ref)
- self.emit_operation(op)
+ num_box = op.getarg(3 + idx_num)
+ ref_box = op.getarg(3 + idx_ref)
+ loc_op = ResOperation(rop.STM_SET_LOCATION, [num_box, ref_box],
+ None)
+ self.optimize_STM_SET_LOCATION(loc_op)
def optimize_STM_SET_LOCATION(self, op):
num = op.getarg(0).getint()
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
@@ -112,6 +112,7 @@
res = self.meta_interp(main, [42, 10], translationoptions={"stm":True})
assert res == 55
self.check_resops(debug_merge_point=6)
+ self.check_resops(stm_set_location=6) # on the main loop
#
from rpython.jit.metainterp.warmspot import get_stats
seen = []
@@ -119,7 +120,8 @@
for op in loop._all_operations():
if op.getopname() == "stm_set_location":
seen.append(op)
- [op] = seen
+ assert len(seen) == 6 + 1
+ op = seen[-1]
assert op.getarg(0).getint() == -42
def test_stm_report_location_2(self):
@@ -155,7 +157,8 @@
for op in loop._all_operations():
if op.getopname() == "stm_set_location":
seen.append(op)
- [op1, op2] = seen
+ assert len(seen) == 6 + 2
+ [op1, op2] = seen[-2:]
assert op1.getarg(0).getint() == -42
assert op2.getarg(0).getint() == -42
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit