[pypy-commit] pypy jit-simplify-backendintf: Yay. More code is killed. Killing this was actually
arigo
noreply at buildbot.pypy.org
Mon Dec 12 10:37:57 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: jit-simplify-backendintf
Changeset: r50416:bdc61f3c13cb
Date: 2011-12-12 10:36 +0100
http://bitbucket.org/pypy/pypy/changeset/bdc61f3c13cb/
Log: Yay. More code is killed. Killing this was actually the goal of
the branch, somehow.
diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -987,6 +987,7 @@
self._may_force = self.opindex
try:
inpargs = _from_opaque(ctl.compiled_version).inputargs
+ assert len(inpargs) == len(args)
for i, inparg in enumerate(inpargs):
TYPE = inparg.concretetype
if TYPE is lltype.Signed:
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
@@ -802,18 +802,22 @@
assert exception, "PropagateExceptionDescr: no exception??"
raise metainterp_sd.ExitFrameWithExceptionRef(cpu, exception)
-def compile_tmp_callback(cpu, jitdriver_sd, greenboxes, redboxes,
+def compile_tmp_callback(cpu, jitdriver_sd, greenboxes, redargtypes,
memory_manager=None):
"""Make a LoopToken that corresponds to assembler code that just
calls back the interpreter. Used temporarily: a fully compiled
version of the code may end up replacing it.
"""
- # 'redboxes' is only used to know the types of red arguments.
jitcell_token = make_jitcell_token(jitdriver_sd)
- # 'nb_red_args' might be smaller than len(redboxes),
- # because it doesn't include the virtualizable boxes.
nb_red_args = jitdriver_sd.num_red_args
- inputargs = [box.clonebox() for box in redboxes[:nb_red_args]]
+ assert len(redargtypes) == nb_red_args
+ inputargs = []
+ for kind in redargtypes:
+ if kind == history.INT: box = BoxInt()
+ elif kind == history.REF: box = BoxPtr()
+ elif kind == history.FLOAT: box = BoxFloat()
+ else: raise AssertionError
+ inputargs.append(box)
k = jitdriver_sd.portal_runner_adr
funcbox = history.ConstInt(heaptracker.adr2int(k))
callargs = [funcbox] + greenboxes + inputargs
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
@@ -2423,22 +2423,6 @@
abox, ConstInt(j), itembox)
assert i + 1 == len(self.virtualizable_boxes)
- def gen_load_from_other_virtualizable(self, vinfo, vbox):
- boxes = []
- assert vinfo is not None
- for i in range(vinfo.num_static_extra_boxes):
- descr = vinfo.static_field_descrs[i]
- boxes.append(self.execute_and_record(rop.GETFIELD_GC, descr, vbox))
- virtualizable = vinfo.unwrap_virtualizable_box(vbox)
- for k in range(vinfo.num_arrays):
- descr = vinfo.array_field_descrs[k]
- abox = self.execute_and_record(rop.GETFIELD_GC, descr, vbox)
- descr = vinfo.array_descrs[k]
- for j in range(vinfo.get_array_length(virtualizable, k)):
- boxes.append(self.execute_and_record(rop.GETARRAYITEM_GC, descr,
- abox, ConstInt(j)))
- return boxes
-
def replace_box(self, oldbox, newbox):
assert isinstance(oldbox, Box)
for frame in self.framestack:
@@ -2510,14 +2494,8 @@
greenargs = arglist[1:num_green_args+1]
args = arglist[num_green_args+1:]
assert len(args) == targetjitdriver_sd.num_red_args
- vinfo = targetjitdriver_sd.virtualizable_info
- if vinfo is not None:
- index = targetjitdriver_sd.index_of_virtualizable
- vbox = args[index]
- args = args + self.gen_load_from_other_virtualizable(vinfo, vbox)
- # ^^^ and not "+=", which makes 'args' a resizable list
warmrunnerstate = targetjitdriver_sd.warmstate
- token = warmrunnerstate.get_assembler_token(greenargs, args)
+ token = warmrunnerstate.get_assembler_token(greenargs)
op = op.copy_and_change(rop.CALL_ASSEMBLER, args=args, descr=token)
self.history.operations.append(op)
diff --git a/pypy/jit/metainterp/warmstate.py b/pypy/jit/metainterp/warmstate.py
--- a/pypy/jit/metainterp/warmstate.py
+++ b/pypy/jit/metainterp/warmstate.py
@@ -554,8 +554,9 @@
jd.on_compile = lambda *args: None
jd.on_compile_bridge = lambda *args: None
- def get_assembler_token(greenkey, redboxes):
- # 'redboxes' is only used to know the types of red arguments
+ redargtypes = ''.join([kind[0] for kind in jd.red_args_types])
+
+ def get_assembler_token(greenkey):
cell = self.jit_cell_at_key(greenkey)
procedure_token = cell.get_procedure_token()
if procedure_token is None:
@@ -564,7 +565,7 @@
cell.counter = 0 # but was freed in the meantime.
memmgr = warmrunnerdesc.memory_manager
procedure_token = compile_tmp_callback(cpu, jd, greenkey,
- redboxes, memmgr)
+ redargtypes, memmgr)
cell.set_procedure_token(procedure_token)
return procedure_token
self.get_assembler_token = get_assembler_token
More information about the pypy-commit
mailing list