[pypy-svn] r75309 - in pypy/branch/multijit-4/pypy/jit: codewriter metainterp metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Sat Jun 12 10:30:05 CEST 2010
Author: arigo
Date: Sat Jun 12 10:30:03 2010
New Revision: 75309
Modified:
pypy/branch/multijit-4/pypy/jit/codewriter/jtransform.py
pypy/branch/multijit-4/pypy/jit/metainterp/blackhole.py
pypy/branch/multijit-4/pypy/jit/metainterp/compile.py
pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py
pypy/branch/multijit-4/pypy/jit/metainterp/pyjitpl.py
pypy/branch/multijit-4/pypy/jit/metainterp/test/test_basic.py
pypy/branch/multijit-4/pypy/jit/metainterp/test/test_compile.py
pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py
pypy/branch/multijit-4/pypy/jit/metainterp/warmstate.py
Log:
Fix bugs.
Modified: pypy/branch/multijit-4/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/codewriter/jtransform.py (original)
+++ pypy/branch/multijit-4/pypy/jit/codewriter/jtransform.py Sat Jun 12 10:30:03 2010
@@ -326,7 +326,8 @@
def handle_recursive_call(self, op):
jitdriver_sd = self.callcontrol.jitdriver_sd_from_portal_runner_ptr(
- op.args[0])
+ op.args[0].value)
+ assert jitdriver_sd is not None
ops = self.promote_greens(op.args[1:], jitdriver_sd.jitdriver)
num_green_args = len(jitdriver_sd.jitdriver.greens)
args = ([Constant(jitdriver_sd.index, lltype.Signed)] +
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/blackhole.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/blackhole.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/blackhole.py Sat Jun 12 10:30:03 2010
@@ -775,24 +775,23 @@
# call the interpreter main loop from here, and just return its
# result.
sd = self.builder.metainterp_sd
- xxxxxxxxxxxx
- if sd.result_type == 'void':
+ result_type = sd.jitdrivers_sd[jdindex].result_type
+ if result_type == 'v':
self.bhimpl_recursive_call_v(jdindex, *args)
self.bhimpl_void_return()
- elif sd.result_type == 'int':
+ elif result_type == 'i':
x = self.bhimpl_recursive_call_i(jdindex, *args)
self.bhimpl_int_return(x)
- elif sd.result_type == 'ref':
+ elif result_type == 'r':
x = self.bhimpl_recursive_call_r(jdindex, *args)
self.bhimpl_ref_return(x)
- elif sd.result_type == 'float':
+ elif result_type == 'f':
x = self.bhimpl_recursive_call_f(jdindex, *args)
self.bhimpl_float_return(x)
assert False
def get_portal_runner(self, jdindex):
- metainterp_sd = self.builder.metainterp_sd
- jitdriver_sd = metainterp_sd.jitdrivers_sd[jdindex]
+ jitdriver_sd = self.builder.metainterp_sd.jitdrivers_sd[jdindex]
fnptr = llmemory.cast_ptr_to_adr(jitdriver_sd.portal_runner_ptr)
fnptr = heaptracker.adr2int(fnptr)
calldescr = jitdriver_sd.mainjitcode.calldescr
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/compile.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/compile.py Sat Jun 12 10:30:03 2010
@@ -68,7 +68,7 @@
loop.token = loop_token
loop.operations[-1].descr = loop_token # patch the target of the JUMP
try:
- old_loop_token = jitdriver_sd._state.optimize_loop(
+ old_loop_token = jitdriver_sd.warmstate.optimize_loop(
metainterp_sd, old_loop_tokens, loop)
except InvalidLoop:
return None
@@ -279,7 +279,7 @@
_trace_and_compile_from_bridge._dont_inline_ = True
def must_compile(self, metainterp_sd, jitdriver_sd):
- trace_eagerness = jitdriver_sd._state.trace_eagerness
+ trace_eagerness = jitdriver_sd.warmstate.trace_eagerness
if self._counter >= 0:
self._counter += 1
return self._counter >= trace_eagerness
@@ -478,7 +478,7 @@
new_loop.token = new_loop_token
send_loop_to_backend(metainterp_sd, new_loop, "entry bridge")
# send the new_loop to warmspot.py, to be called directly the next time
- jitdriver_sd._state.attach_unoptimized_bridge_from_interp(
+ jitdriver_sd.warmstate.attach_unoptimized_bridge_from_interp(
self.original_greenkey,
new_loop_token)
# store the new loop in compiled_merge_points too
@@ -506,11 +506,11 @@
# clone ops, as optimize_bridge can mutate the ops
new_loop.operations = [op.clone() for op in metainterp.history.operations]
metainterp_sd = metainterp.staticdata
- jitdriver_sd = metainterp.jitdriver_sd
+ state = metainterp.jitdriver_sd.warmstate
try:
- target_loop_token = jitdriver_sd._state.optimize_bridge(metainterp_sd,
- old_loop_tokens,
- new_loop)
+ target_loop_token = state.optimize_bridge(metainterp_sd,
+ old_loop_tokens,
+ new_loop)
except InvalidLoop:
# XXX I am fairly convinced that optimize_bridge cannot actually raise
# InvalidLoop
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py Sat Jun 12 10:30:03 2010
@@ -10,6 +10,7 @@
# self.num_green_args ... pypy.jit.metainterp.warmspot
# self.result_type ... pypy.jit.metainterp.warmspot
# self.virtualizable_info... pypy.jit.metainterp.warmspot
+ # self.warmstate ... pypy.jit.metainterp.warmspot
# self.index ... pypy.jit.codewriter.call
# self.mainjitcode ... pypy.jit.codewriter.call
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/pyjitpl.py Sat Jun 12 10:30:03 2010
@@ -659,11 +659,10 @@
@arguments("int", "boxes3", "boxes3")
def _opimpl_recursive_call(self, jdindex, greenboxes, redboxes):
+ targetjitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
allboxes = greenboxes + redboxes
- metainterp_sd = self.metainterp.staticdata
- xxxx
- portal_code = metainterp_sd.portal_code
- warmrunnerstate = metainterp_sd.state
+ portal_code = targetjitdriver_sd.mainjitcode
+ warmrunnerstate = targetjitdriver_sd.warmstate
token = None
if warmrunnerstate.inlining:
if warmrunnerstate.can_inline_callable(greenboxes):
@@ -672,12 +671,13 @@
token = warmrunnerstate.get_assembler_token(greenboxes)
# verify that we have all green args, needed to make sure
# that assembler that we call is still correct
- self.verify_green_args(greenboxes)
+ self.verify_green_args(targetjitdriver_sd, greenboxes)
#
- k = llmemory.cast_ptr_to_adr(metainterp_sd._portal_runner_ptr)
+ k = llmemory.cast_ptr_to_adr(targetjitdriver_sd.portal_runner_ptr)
funcbox = ConstInt(heaptracker.adr2int(k))
return self.do_residual_call(funcbox, portal_code.calldescr,
- allboxes, assembler_call_token=token)
+ allboxes, assembler_call_token=token,
+ assembler_call_jd=targetjitdriver_sd)
opimpl_recursive_call_i = _opimpl_recursive_call
opimpl_recursive_call_r = _opimpl_recursive_call
@@ -768,18 +768,18 @@
raise CannotInlineCanEnterJit()
self.metainterp.seen_can_enter_jit = True
- def verify_green_args(self, jdindex, varargs):
- jitdriver = self.metainterp.staticdata.jitdrivers_sd[jdindex]
- num_green_args = jitdriver.num_green_args
+ def verify_green_args(self, jitdriver_sd, varargs):
+ num_green_args = jitdriver_sd.num_green_args
assert len(varargs) == num_green_args
for i in range(num_green_args):
assert isinstance(varargs[i], Const)
@arguments("orgpc", "int", "boxes3", "boxes3")
def opimpl_jit_merge_point(self, orgpc, jdindex, greenboxes, redboxes):
- self.verify_green_args(jdindex, greenboxes)
+ jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
+ self.verify_green_args(jitdriver_sd, greenboxes)
# xxx we may disable the following line in some context later
- self.debug_merge_point(jdindex, greenboxes)
+ self.debug_merge_point(jitdriver_sd, greenboxes)
if self.metainterp.seen_can_enter_jit:
self.metainterp.seen_can_enter_jit = False
# Assert that it's impossible to arrive here with in_recursion
@@ -787,7 +787,7 @@
# to True by opimpl_can_enter_jit, which should be executed
# just before opimpl_jit_merge_point (no recursion inbetween).
assert not self.metainterp.in_recursion
- assert jdindex == self.metainterp.jitdriver_sd.index
+ assert jitdriver_sd is self.metainterp.jitdriver_sd
# Set self.pc to point to jit_merge_point instead of just after:
# if reached_can_enter_jit() raises SwitchToBlackhole, then the
# pc is still at the jit_merge_point, which is a point that is
@@ -797,10 +797,9 @@
self.metainterp.reached_can_enter_jit(greenboxes, redboxes)
self.pc = saved_pc
- def debug_merge_point(self, jdindex, greenkey):
+ def debug_merge_point(self, jitdriver_sd, greenkey):
# debugging: produce a DEBUG_MERGE_POINT operation
- jitdriver = self.metainterp.staticdata.jitdrivers_sd[jdindex]
- loc = jitdriver._state.get_location_str(greenkey)
+ loc = jitdriver_sd.warmstate.get_location_str(greenkey)
debug_print(loc)
constloc = self.metainterp.cpu.ts.conststr(loc)
self.metainterp.history.record(rop.DEBUG_MERGE_POINT,
@@ -1002,7 +1001,8 @@
return resbox
def do_residual_call(self, funcbox, descr, argboxes,
- assembler_call_token=None):
+ assembler_call_token=None,
+ assembler_call_jd=None):
# 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
@@ -1047,7 +1047,8 @@
rop.CALL_MAY_FORCE, allboxes, descr=descr)
self.metainterp.vrefs_after_residual_call()
if assembler_call_token is not None:
- self.metainterp.direct_assembler_call(assembler_call_token)
+ self.metainterp.direct_assembler_call(assembler_call_token,
+ assembler_call_jd)
if resbox is not None:
self.make_result_of_lastop(resbox)
self.metainterp.vable_after_residual_call()
@@ -1135,7 +1136,7 @@
def setup_jitdrivers_sd(self, optimizer):
if optimizer is not None:
for jd in self.jitdrivers_sd:
- jd._state.set_param_optimizer(optimizer)
+ jd.warmstate.set_param_optimizer(optimizer)
def finish_setup(self, codewriter, optimizer=None):
from pypy.jit.metainterp.blackhole import BlackholeInterpBuilder
@@ -1468,7 +1469,7 @@
self.resumekey.reset_counter_from_failure()
def blackhole_if_trace_too_long(self):
- warmrunnerstate = self.jitdriver_sd._state
+ warmrunnerstate = self.jitdriver_sd.warmstate
if len(self.history.operations) > warmrunnerstate.trace_limit:
greenkey_of_huge_function = self.find_biggest_function()
self.portal_trace_positions = None
@@ -1678,7 +1679,7 @@
raise NotImplementedError(opname[opnum])
def get_compiled_merge_points(self, greenkey):
- cell = self.jitdriver_sd._state.jit_cell_at_key(greenkey)
+ cell = self.jitdriver_sd.warmstate.jit_cell_at_key(greenkey)
if cell.compiled_merge_points is None:
cell.compiled_merge_points = []
return cell.compiled_merge_points
@@ -1975,8 +1976,7 @@
abox, ConstInt(j), itembox)
assert i + 1 == len(self.virtualizable_boxes)
- def gen_load_from_other_virtualizable(self, vbox):
- vinfo = self.jitdriver_sd.virtualizable_info
+ def gen_load_from_other_virtualizable(self, vinfo, vbox):
boxes = []
assert vinfo is not None
for i in range(vinfo.num_static_extra_boxes):
@@ -2048,19 +2048,19 @@
op.args = [resbox_as_const] + op.args
return resbox
- def direct_assembler_call(self, token):
+ def direct_assembler_call(self, token, targetjitdriver_sd):
""" Generate a direct call to assembler for portal entry point,
patching the CALL_MAY_FORCE that occurred just now.
"""
op = self.history.operations.pop()
assert op.opnum == rop.CALL_MAY_FORCE
- num_green_args = self.staticdata.num_green_args
+ num_green_args = targetjitdriver_sd.num_green_args
args = op.args[num_green_args + 1:]
- vinfo = self.jitdriver_sd.virtualizable_info
+ vinfo = targetjitdriver_sd.virtualizable_info
if vinfo is not None:
vindex = vinfo.index_of_virtualizable
vbox = args[vindex - num_green_args]
- args = args + self.gen_load_from_other_virtualizable(vbox)
+ args = args + self.gen_load_from_other_virtualizable(vinfo, vbox)
# ^^^ and not "+=", which makes 'args' a resizable list
op.opnum = rop.CALL_ASSEMBLER
op.args = args
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/test/test_basic.py Sat Jun 12 10:30:03 2010
@@ -53,8 +53,9 @@
testself.cw = cw
cw.find_all_graphs(JitPolicy())
#
- testself.warmrunnerstate = FakeJitDriverSD._state = FakeWarmRunnerState()
+ testself.warmrunnerstate = FakeWarmRunnerState()
testself.warmrunnerstate.cpu = cpu
+ FakeJitDriverSD.warmstate = testself.warmrunnerstate
if hasattr(testself, 'finish_setup_for_interp_operations'):
testself.finish_setup_for_interp_operations()
#
@@ -831,7 +832,7 @@
translator.config.translation.gc = "boehm"
warmrunnerdesc = WarmRunnerDesc(translator,
CPUClass=self.CPUClass)
- state = warmrunnerdesc.jitdrivers_sd[0]._state
+ state = warmrunnerdesc.jitdrivers_sd[0].warmstate
state.set_param_threshold(3) # for tests
state.set_param_trace_eagerness(0) # for tests
warmrunnerdesc.finish()
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/test/test_compile.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/test/test_compile.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/test/test_compile.py Sat Jun 12 10:30:03 2010
@@ -58,7 +58,7 @@
class FakeMetaInterp:
class jitdriver_sd:
- _state = FakeState()
+ warmstate = FakeState()
def test_compile_new_loop():
cpu = FakeCPU()
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py Sat Jun 12 10:30:03 2010
@@ -71,11 +71,11 @@
translator.config.translation.list_comprehension_operations = True
warmrunnerdesc = WarmRunnerDesc(translator, backendopt=backendopt, **kwds)
for jd in warmrunnerdesc.jitdrivers_sd:
- jd._state.set_param_threshold(3) # for tests
- jd._state.set_param_trace_eagerness(2) # for tests
- jd._state.set_param_trace_limit(trace_limit)
- jd._state.set_param_inlining(inline)
- jd._state.set_param_debug(debug_level)
+ jd.warmstate.set_param_threshold(3) # for tests
+ jd.warmstate.set_param_trace_eagerness(2) # for tests
+ jd.warmstate.set_param_trace_limit(trace_limit)
+ jd.warmstate.set_param_inlining(inline)
+ jd.warmstate.set_param_debug(debug_level)
warmrunnerdesc.finish()
res = interp.eval_graph(graph, args)
if not kwds.get('translate_support_code', False):
@@ -361,7 +361,7 @@
from pypy.jit.metainterp.warmstate import WarmEnterState
state = WarmEnterState(self, jd)
maybe_compile_and_run = state.make_entry_point()
- jd._state = state
+ jd.warmstate = state
def crash_in_jit(e):
if not we_are_translated():
@@ -699,7 +699,7 @@
_, PTR_SET_PARAM_FUNCTYPE = self.cpu.ts.get_FuncType([lltype.Signed],
lltype.Void)
def make_closure(jd, fullfuncname):
- state = jd._state
+ state = jd.warmstate
def closure(i):
getattr(state, fullfuncname)(i)
funcptr = self.helper_func(PTR_SET_PARAM_FUNCTYPE, closure)
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/warmstate.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/warmstate.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/warmstate.py Sat Jun 12 10:30:03 2010
@@ -187,8 +187,7 @@
cell = self.jit_cell_at_key(greenkey)
cell.dont_trace_here = True
debug_start("jit-disableinlining")
- sd = self.warmrunnerdesc.metainterp_sd
- loc = sd.state.get_location_str(greenkey)
+ loc = self.get_location_str(greenkey)
debug_print("disabled inlining", loc)
debug_stop("jit-disableinlining")
More information about the Pypy-commit
mailing list