Author: Hakan Ardo <[email protected]>
Branch: jit-targets
Changeset: r48773:096da5690e5d
Date: 2011-11-05 09:30 +0100
http://bitbucket.org/pypy/pypy/changeset/096da5690e5d/
Log: store the short preamble on the TargetToken instead
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -133,9 +133,8 @@
print
if expected_short:
print "Short Preamble:"
- short = loop.token.short_preamble[0]
- print short.inputargs
- print '\n'.join([str(o) for o in short.operations])
+ short = loop.operations[0].getdescr().short_preamble
+ print '\n'.join([str(o) for o in short])
print
assert expected != "crash!", "should have raised an exception"
@@ -146,9 +145,11 @@
text_right='expected preamble')
assert preamble.operations[-1].getdescr() ==
loop.operations[0].getdescr()
if expected_short:
- self.assert_equal(short,
convert_old_style_to_targets(expected_short, jump=True),
+ short_preamble = TreeLoop('short preamble')
+ short_preamble.operations = short
+ self.assert_equal(short_preamble,
convert_old_style_to_targets(expected_short, jump=True),
text_right='expected short preamble')
- assert short.operations[-1].getdescr() ==
loop.operations[0].getdescr()
+ assert short[-1].getdescr() == loop.operations[0].getdescr()
return loop
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
@@ -145,13 +145,10 @@
else:
assert lastop.getdescr().merge_point is
start_targetop.getdescr().merge_point
jumpop = ResOperation(rop.JUMP, lastop.getarglist(), None,
descr=start_targetop.getdescr())
+
self.close_loop(jumpop)
- short_preamble_loop = self.produce_short_preamble(lastop)
- assert isinstance(loop.token, LoopToken)
- if loop.token.short_preamble:
- loop.token.short_preamble.append(short_preamble_loop) # FIXME:
??
- else:
- loop.token.short_preamble = [short_preamble_loop]
+ self.finilize_short_preamble(lastop)
+ start_targetop.getdescr().short_preamble = self.short
#else:
# loop.operations = self.optimizer.get_newoperations()
@@ -192,8 +189,8 @@
assert isinstance(target_token, TargetToken)
targetop.initarglist(inputargs)
target_token.virtual_state = virtual_state
- target_token.exported_state = ExportedState(short_inputargs,
- constant_inputargs,
short_boxes,
+ target_token.short_preamble = [ResOperation(rop.TARGET,
short_inputargs, None)]
+ target_token.exported_state = ExportedState(constant_inputargs,
short_boxes,
inputarg_setup_ops,
self.optimizer,
start_resumedescr)
@@ -207,7 +204,7 @@
return
self.did_peel_one = True
- self.short = []
+ self.short = target_token.short_preamble
self.short_seen = {}
self.short_boxes = exported_state.short_boxes
for box, const in exported_state.constant_inputargs.items():
@@ -255,7 +252,7 @@
def close_loop(self, jumpop):
virtual_state = self.initial_virtual_state
- short_inputargs = self.imported_state.short_inputargs
+ short_inputargs = self.short[0].getarglist()
constant_inputargs = self.imported_state.constant_inputargs
inputargs = self.inputargs
short_jumpargs = inputargs[:]
@@ -271,7 +268,7 @@
self.short_inliner = Inliner(short_inputargs, jmp_to_short_args)
for box, const in constant_inputargs.items():
self.short_inliner.argmap[box] = const
- for op in self.short:
+ for op in self.short[1:]:
newop = self.short_inliner.inline_op(op)
self.optimizer.send_extra_operation(newop)
@@ -329,7 +326,7 @@
raise InvalidLoop
debug_stop('jit-log-virtualstate')
- def produce_short_preamble(self, lastop):
+ def finilize_short_preamble(self, lastop):
short = self.short
assert short[-1].getopnum() == rop.JUMP
@@ -343,12 +340,8 @@
op.setdescr(descr)
short[i] = op
- short_loop = TreeLoop('short preamble')
- short_inputargs = self.imported_state.short_inputargs
- short_loop.operations = [ResOperation(rop.TARGET, short_inputargs,
None)] + \
- short
-
# Clone ops and boxes to get private versions and
+ short_inputargs = short[0].getarglist()
boxmap = {}
newargs = [None] * len(short_inputargs)
for i in range(len(short_inputargs)):
@@ -361,20 +354,20 @@
inliner = Inliner(short_inputargs, newargs)
for box, const in self.imported_state.constant_inputargs.items():
inliner.argmap[box] = const
- ops = [inliner.inline_op(op) for op in short_loop.operations]
- short_loop.operations = ops
- descr = self.start_resumedescr.clone_if_mutable()
- inliner.inline_descr_inplace(descr)
- short_loop.start_resumedescr = descr
+ for i in range(len(short)):
+ short[i] = inliner.inline_op(short[i])
+
+ self.start_resumedescr = self.start_resumedescr.clone_if_mutable()
+ inliner.inline_descr_inplace(self.start_resumedescr)
+ #short_loop.start_resumedescr = descr
+ # FIXME: move this to targettoken
# Forget the values to allow them to be freed
- for box in short_loop.inputargs:
+ for box in short[0].getarglist():
box.forget_value()
- for op in short_loop.operations:
+ for op in short:
if op.result:
op.result.forget_value()
-
- return short_loop
def FIXME_old_stuff():
preamble_optimizer = self.optimizer
@@ -573,10 +566,9 @@
self.unroll.add_op_to_short(self.op, False, True)
class ExportedState(object):
- def __init__(self, short_inputargs, constant_inputargs,
+ def __init__(self, constant_inputargs,
short_boxes, inputarg_setup_ops, optimizer,
start_resumedescr):
- self.short_inputargs = short_inputargs
self.constant_inputargs = constant_inputargs
self.short_boxes = short_boxes
self.inputarg_setup_ops = inputarg_setup_ops
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit