[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