[pypy-commit] pypy continulet-jit-3: in-progress, the current situation of fixes
fijal
noreply at buildbot.pypy.org
Sun Oct 21 12:34:28 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: continulet-jit-3
Changeset: r58299:73d377e08a91
Date: 2012-10-21 12:33 +0200
http://bitbucket.org/pypy/pypy/changeset/73d377e08a91/
Log: in-progress, the current situation of fixes
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
@@ -415,9 +415,10 @@
self.make_three_lists(op.args[1:1+num_green_args]) +
self.make_three_lists(op.args[1+num_green_args:]))
kind = getkind(op.result.concretetype)[0]
- op0 = SpaceOperation('recursive_call_%s' % kind, args, op.result)
- op1 = SpaceOperation('-live-', [], None)
- return ops + [op0, op1]
+ op0 = SpaceOperation('-live-', [], None)
+ op1 = SpaceOperation('recursive_call_%s' % kind, args, op.result)
+ op2 = SpaceOperation('-live-', [], None)
+ return ops + [op0, op1, op2]
handle_residual_indirect_call = handle_residual_call
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
@@ -753,6 +753,7 @@
jfdescr = jfdescrbox.getref_base()
descr = cpu.jitframe_cast_jfdescr_to_descr(jfdescr)
if not descr:
+ xxx
raise SwitchToBlackhole(Counters.ABORT_ESCAPE)
resume.rebuild_virtualizable_from_resumedata(self.metainterp, descr,
vinfo, box, jfbox)
@@ -891,8 +892,8 @@
opimpl_residual_call_irf_f = _opimpl_residual_call3
opimpl_residual_call_irf_v = _opimpl_residual_call3
- @arguments("int", "boxes3", "boxes3")
- def _opimpl_recursive_call(self, jdindex, greenboxes, redboxes):
+ @arguments("int", "boxes3", "boxes3", "orgpc")
+ def _opimpl_recursive_call(self, jdindex, greenboxes, redboxes, orgpc):
targetjitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
allboxes = greenboxes + redboxes
warmrunnerstate = targetjitdriver_sd.warmstate
@@ -900,6 +901,7 @@
if warmrunnerstate.inlining:
if warmrunnerstate.can_inline_callable(greenboxes):
portal_code = targetjitdriver_sd.mainjitcode
+ self.orgpc_before_recursive_call = orgpc
return self.metainterp.perform_call(portal_code, allboxes,
greenkey=greenboxes)
assembler_call = True
@@ -908,16 +910,17 @@
self.verify_green_args(targetjitdriver_sd, greenboxes)
#
return self.do_recursive_call(targetjitdriver_sd, allboxes,
- assembler_call)
+ assembler_call, orgpc=orgpc)
def do_recursive_call(self, targetjitdriver_sd, allboxes,
- assembler_call=False):
+ assembler_call=False, orgpc=-1):
portal_code = targetjitdriver_sd.mainjitcode
k = targetjitdriver_sd.portal_runner_adr
funcbox = ConstInt(heaptracker.adr2int(k))
return self.do_residual_call(funcbox, portal_code.calldescr, allboxes,
assembler_call=assembler_call,
- assembler_call_jd=targetjitdriver_sd)
+ assembler_call_jd=targetjitdriver_sd,
+ orgpc=orgpc)
opimpl_recursive_call_i = _opimpl_recursive_call
opimpl_recursive_call_r = _opimpl_recursive_call
@@ -1098,7 +1101,8 @@
pass
frame = self.metainterp.framestack[-1]
frame.do_recursive_call(jitdriver_sd, greenboxes + redboxes,
- assembler_call=True)
+ assembler_call=True,
+ orgpc=frame.orgpc_before_recursive_call)
raise ChangeFrame
def debug_merge_point(self, jitdriver_sd, jd_index, portal_call_depth, current_call_id, greenkey):
@@ -1377,7 +1381,8 @@
def do_residual_call(self, funcbox, descr, argboxes,
assembler_call=False,
- assembler_call_jd=None):
+ assembler_call_jd=None,
+ orgpc=-1):
# First build allboxes: it may need some reordering from the
# list provided in argboxes, depending on the order in which
# the arguments are expected by the function
@@ -1412,7 +1417,7 @@
#
effectinfo = descr.get_extra_info()
if (assembler_call or
- effectinfo.check_forces_virtual_or_virtualizable()):
+ effectinfo.check_forces_virtual_or_virtualizable()):
# residual calls require attention to keep virtualizables in-sync
self.metainterp.clear_exception()
self.metainterp.vable_and_vrefs_before_residual_call()
@@ -1420,7 +1425,8 @@
rop.CALL_MAY_FORCE, allboxes, descr=descr)
self.metainterp.vrefs_after_residual_call()
if assembler_call:
- self.metainterp.direct_assembler_call(assembler_call_jd)
+ self.metainterp.direct_assembler_call(assembler_call_jd,
+ orgpc)
if resbox is not None:
self.make_result_of_lastop(resbox)
self.metainterp.vable_after_residual_call()
@@ -2528,7 +2534,7 @@
self.history.operations[-1] = newop
return resbox
- def direct_assembler_call(self, targetjitdriver_sd):
+ def direct_assembler_call(self, targetjitdriver_sd, orgpc):
""" Generate a direct call to assembler for portal entry point,
patching the CALL_MAY_FORCE that occurred just now.
"""
@@ -2540,10 +2546,12 @@
args = arglist[num_green_args+1:]
assert len(args) == targetjitdriver_sd.num_red_args
warmrunnerstate = targetjitdriver_sd.warmstate
- if targetjitdriver_sd.virtualizable_info is not None:
+ if targetjitdriver_sd.virtualizable_info is not None and orgpc != -1:
vbox = args[targetjitdriver_sd.index_of_virtualizable]
frame = self.framestack[-1]
- frame._force_virtualizable_if_necessary(vbox, frame.pc)
+ import pdb
+ pdb.set_trace()
+ frame._force_virtualizable_if_necessary(vbox, orgpc)
token = warmrunnerstate.get_assembler_token(greenargs)
op = op.copy_and_change(rop.CALL_ASSEMBLER, args=args, descr=token)
self.history.operations.append(op)
More information about the pypy-commit
mailing list