[pypy-svn] pypy jit-short-preamble: need some more -live- to be able to resume at to
hakanardo
commits-noreply at bitbucket.org
Fri Jan 21 12:16:26 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-short-preamble
Changeset: r41117:cbcba9f47db9
Date: 2011-01-21 12:15 +0100
http://bitbucket.org/pypy/pypy/changeset/cbcba9f47db9/
Log: need some more -live- to be able to resume at to
diff --git a/pypy/jit/metainterp/test/test_basic.py b/pypy/jit/metainterp/test/test_basic.py
--- a/pypy/jit/metainterp/test/test_basic.py
+++ b/pypy/jit/metainterp/test/test_basic.py
@@ -1944,16 +1944,16 @@
myjitdriver.jit_merge_point(y=y, x=x, z=z, res=res)
res = res.binop(x)
y -= 1
- if y < 7:
+ if y < 8:
x = z
return res
def g(x, y):
- c1 = f(B(x), y, A(x))
- c2 = f(B(x), y, A(x))
+ c1 = f(A(x), y, B(x))
+ c2 = f(A(x), y, B(x))
assert c1.val == c2.val
return c1.val
- res = self.meta_interp(g, [3, 14])
- assert res == g(3, 14)
+ res = self.meta_interp(g, [3, 16])
+ assert res == g(3, 16)
def test_inlined_guard_in_short_preamble(self):
myjitdriver = JitDriver(greens = [], reds = ['y', 'x', 'z', 'res'])
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -391,6 +391,26 @@
self.copy_all_attrbutes_into(res)
return res
+class ResumeAtPositionDescr(ResumeGuardDescr):
+ #def __init__(self, position):
+ # self.position = position
+
+ def _clone_if_mutable(self):
+ res = ResumeAtPositionDescr()
+ self.copy_all_attrbutes_into(res)
+ return res
+
+ def handle_fail(self, metainterp_sd, jitdriver_sd):
+ if True or self.must_compile(metainterp_sd, jitdriver_sd):
+ return self._trace_and_compile_from_bridge(metainterp_sd,
+ jitdriver_sd)
+ else:
+ raise NotImplementedError
+ # FIXME: patch blackhole._prepare_resume_from_failure(self, opnum)
+ from pypy.jit.metainterp.blackhole import resume_in_blackhole
+ resume_in_blackhole(metainterp_sd, jitdriver_sd, self)
+ assert 0, "unreachable"
+
class ResumeGuardForcedDescr(ResumeGuardDescr):
def __init__(self, metainterp_sd, jitdriver_sd):
@@ -589,7 +609,7 @@
# know exactly what we must do (ResumeGuardDescr/ResumeFromInterpDescr)
prepare_last_operation(new_loop, target_loop_token)
resumekey.compile_and_attach(metainterp, new_loop)
- compile_known_target_bridges(metainterp, new_loop)
+ #compile_known_target_bridges(metainterp, new_loop)
record_loop_or_bridge(metainterp_sd, new_loop)
return target_loop_token
diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -881,7 +881,9 @@
op1 = SpaceOperation('jit_merge_point', args, None)
op2 = SpaceOperation('-live-', [], None)
# ^^^ we need a -live- for the case of do_recursive_call()
- return ops + [op1, op2]
+ op3 = SpaceOperation('-live-', [], None)
+ # and one for inlined short preambles
+ return ops + [op3, op1, op2]
def handle_jit_marker__loop_header(self, op, jitdriver):
jd = self.callcontrol.jitdriver_sd_from_jitdriver(jitdriver)
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -19,7 +19,7 @@
from pypy.jit.metainterp.jitexc import JitException, get_llexception
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.objectmodel import specialize
-from pypy.jit.codewriter.jitcode import JitCode, SwitchDictDescr
+from pypy.jit.codewriter.jitcode import JitCode, SwitchDictDescr, MissingLiveness
from pypy.jit.codewriter import heaptracker
from pypy.jit.metainterp.optimizeutil import RetraceLoop
@@ -832,8 +832,13 @@
@arguments("orgpc", "int", "boxes3", "jitcode_position", "boxes3")
def opimpl_jit_merge_point(self, orgpc, jdindex, greenboxes,
jcposition, redboxes):
+ #try:
+ #resumedescr = compile.ResumeAtPositionDescr() #ResumeGuardDescr()
resumedescr = compile.ResumeGuardDescr()
- self.capture_resumedata(resumedescr)
+ self.capture_resumedata(resumedescr, orgpc)
+ #except MissingLiveness:
+ # resumedescr = None
+ #resumedescr.rd_frame_info_list.pc = orgpc # FIXME: IS this safe?
any_operation = len(self.metainterp.history.operations) > 0
jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
@@ -1091,11 +1096,13 @@
metainterp.jitdriver_sd.greenfield_info is not None):
virtualizable_boxes = metainterp.virtualizable_boxes
saved_pc = self.pc
- if resumepc >= 0:
- self.pc = resumepc
- resume.capture_resumedata(metainterp.framestack, virtualizable_boxes,
- metainterp.virtualref_boxes, resumedescr)
- self.pc = saved_pc
+ try:
+ if resumepc >= 0:
+ self.pc = resumepc
+ resume.capture_resumedata(metainterp.framestack, virtualizable_boxes,
+ metainterp.virtualref_boxes, resumedescr)
+ finally:
+ self.pc = saved_pc
def implement_guard_value(self, orgpc, box):
"""Promote the given Box into a Const. Note: be careful, it's a
More information about the Pypy-commit
mailing list