[pypy-commit] pypy jit-usable_retrace_3: use the short preamable instead (this is becomming too big a hack)
hakanardo
noreply at buildbot.pypy.org
Thu Sep 6 19:57:10 CEST 2012
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-usable_retrace_3
Changeset: r57186:dfe5cc3b6d3d
Date: 2012-09-06 19:56 +0200
http://bitbucket.org/pypy/pypy/changeset/dfe5cc3b6d3d/
Log: use the short preamable instead (this is becomming too big a hack)
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
@@ -193,6 +193,8 @@
assert loop_jitcell_token
assert partial_trace.operations[-1].getopnum() == rop.LABEL
orignial_label = partial_trace.operations[-1].clone()
+ exported_state = orignial_label.getdescr().exported_state
+
h_ops = history.operations
preamble = create_empty_loop(metainterp)
@@ -219,7 +221,35 @@
None, descr=loop_jitcell_token)]
optimize_trace(metainterp_sd, loop, jitdriver_sd.warmstate.enable_opts)
- preamble.operations = preamble.operations[:-1]
+ label = loop.operations[0]
+ assert label.getopnum() == rop.LABEL
+
+ target_token = label.getdescr()
+ assert isinstance(target_token, TargetToken)
+ assert loop_jitcell_token.target_tokens
+ loop_jitcell_token.target_tokens.append(target_token)
+
+ orignial_label.getdescr().exported_state = exported_state # XXX: Hack
+ orignial_label.getdescr().short_preamble = None # XXX: Hack
+
+ preamble.operations = [orignial_label] + \
+ [ResOperation(rop.JUMP, exported_state.jump_args,
+ None, descr=loop_jitcell_token)]
+ try:
+ optimize_trace(metainterp_sd, preamble, jitdriver_sd.warmstate.enable_opts)
+ except InvalidLoop:
+ assert False
+
+ assert loop.operations[0].getopnum() == rop.LABEL
+ assert preamble.operations[0].getopnum() == rop.LABEL
+ jumpop = preamble.operations[-1]
+ assert jumpop.getopnum() == rop.JUMP
+ preamble.operations = preamble.operations[1:-1]
+ for a1, a2 in zip(jumpop.getarglist(), loop.operations[0].getarglist()):
+ if a1 is not a2:
+ preamble.operations.append(ResOperation(rop.SAME_AS, [a1], a2))
+
+ #loop.operations = []
except InvalidLoop:
# Fall back on jumping to preamble
@@ -244,6 +274,7 @@
loop = trace # FIXME: rename
assert loop.operations[-1].getopnum() != rop.LABEL
+ # FIXME: done above
target_token = label.getdescr()
assert isinstance(target_token, TargetToken)
assert loop_jitcell_token.target_tokens
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -232,7 +232,10 @@
self.initial_virtual_state = virtual_state
return
- self.short = target_token.short_preamble[:]
+ if target_token.short_preamble:
+ self.short = target_token.short_preamble[:]
+ else:
+ self.short = None
self.short_seen = {}
self.short_boxes = exported_state.short_boxes
self.short_resume_at_jump_descr = target_token.resume_at_jump_descr
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -384,7 +384,7 @@
pass
if value.is_constant():
op = ResOperation(rop.SAME_AS, [box], box.clonebox())
- optimizer._newoperations.append(op)
+ #optimizer._newoperations.append(op) FIXME
return optimizer.getvalue(op.result)
else:
v = OptValue(box)
More information about the pypy-commit
mailing list