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

Reply via email to