[pypy-commit] pypy jit-leaner-frontend: random progress

fijal pypy.commits at gmail.com
Sun Feb 21 12:50:07 EST 2016


Author: fijal
Branch: jit-leaner-frontend
Changeset: r82373:fcbf2f97bc45
Date: 2016-02-19 19:12 +0100
http://bitbucket.org/pypy/pypy/changeset/fcbf2f97bc45/

Log:	random progress

diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -652,9 +652,12 @@
 
         self.trace = Trace(inpargs)
 
+    def any_operation(self):
+        return self.trace._count > 0
+
     @specialize.argtype(3)
     def record(self, opnum, argboxes, value, descr=None):
-        op = self.trace.record_op(self.operations, opnum, argboxes, value, descr)
+        op = self.trace.record_op(opnum, argboxes, descr)
         if value is None:
             assert op.type == 'v'
         elif isinstance(value, bool):
@@ -751,7 +754,9 @@
         self.jitcell_token_wrefs.append(weakref.ref(token))
 
     def set_history(self, history):
-        self.operations = history.operations
+        # XXX think about something
+        pass
+        #self.operations = history.operations
 
     def aborted(self):
         self.aborted_count += 1
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1221,7 +1221,7 @@
     @arguments("int", "boxes3", "jitcode_position", "boxes3", "orgpc")
     def opimpl_jit_merge_point(self, jdindex, greenboxes,
                                jcposition, redboxes, orgpc):
-        any_operation = len(self.metainterp.history.operations) > 0
+        any_operation = self.metainterp.history.any_operation()
         jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
         self.verify_green_args(jitdriver_sd, greenboxes)
         self.debug_merge_point(jitdriver_sd, jdindex,
@@ -2050,13 +2050,13 @@
         else:
             guard_op = self.history.record(opnum, moreargs, None)            
         assert isinstance(guard_op, GuardResOp)
-        self.capture_resumedata(guard_op, resumepc)
+        self.capture_resumedata(resumepc) # <- records extra to history
         self.staticdata.profiler.count_ops(opnum, Counters.GUARDS)
         # count
         self.attach_debug_info(guard_op)
         return guard_op
 
-    def capture_resumedata(self, guard_op, resumepc=-1):
+    def capture_resumedata(self, resumepc=-1):
         virtualizable_boxes = None
         if (self.jitdriver_sd.virtualizable_info is not None or
             self.jitdriver_sd.greenfield_info is not None):
@@ -2068,7 +2068,7 @@
             if resumepc >= 0:
                 frame.pc = resumepc
         resume.capture_resumedata(self.framestack, virtualizable_boxes,
-                                  self.virtualref_boxes, guard_op)
+                                  self.virtualref_boxes, self.history.trace)
         if self.framestack:
             self.framestack[-1].pc = saved_pc
 
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -1427,6 +1427,12 @@
         return rop._ALWAYS_PURE_FIRST <= opnum <= rop._ALWAYS_PURE_LAST
 
     @staticmethod
+    def is_pure_with_descr(opnum, descr):
+        if rop.is_always_pure(opnum):
+            return True
+        xxxx
+
+    @staticmethod
     def has_no_side_effect(opnum):
         return rop._NOSIDEEFFECT_FIRST <= opnum <= rop._NOSIDEEFFECT_LAST
 
diff --git a/rpython/jit/metainterp/test/test_opencoder.py b/rpython/jit/metainterp/test/test_opencoder.py
--- a/rpython/jit/metainterp/test/test_opencoder.py
+++ b/rpython/jit/metainterp/test/test_opencoder.py
@@ -3,6 +3,7 @@
 from rpython.jit.metainterp.resoperation import rop, InputArgInt
 from rpython.jit.metainterp.history import ConstInt
 from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
+from rpython.jit.metainterp import resume
 
 class TestOpencoder(object):
     def unpack(self, t):
@@ -30,4 +31,14 @@
         i0, i1 = InputArgInt(), InputArgInt()
         t = Trace([i0, i1])
         add = t.record_op(rop.INT_ADD, [i0, i1])
-        guard_op = t.record_op(rop.GUARD_FALSE, [add])
\ No newline at end of file
+        t.record_op(rop.GUARD_FALSE, [add])
+        # now we write rd_snapshot and friends
+        virtualizable_boxes = []
+        virutalref_boxes = []
+        framestack = []
+        framestack.xxx
+        resume.capture_resumedata(framestack, virtualizable_boxes,
+                                  virutalref_boxes, t)
+        (i0, i1), l = self.unpack(t)
+        assert l[1].opnum == rop.GUARD_FALSE
+        assert l[1].rd_snapshot == [i0, i1]
\ No newline at end of file


More information about the pypy-commit mailing list