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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit