Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78477:e72ba7da5f04
Date: 2015-07-06 16:52 +0200
http://bitbucket.org/pypy/pypy/changeset/e72ba7da5f04/
Log: start passing first optimizeopt tests
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -55,7 +55,8 @@
# the short preamble doesn't have fail descrs, they are patched in
when it is used
expected_short = self.parse(expected_short, want_fail_descr=False)
- preamble = self.unroll_and_optimize(loop, call_pure_results)
+ info = self.unroll_and_optimize(loop, call_pure_results)
+ preamble = info.preamble
#
print
@@ -70,7 +71,7 @@
print
if expected_short:
print "Short Preamble:"
- short = loop.operations[0].getdescr().short_preamble
+ short = info.short_preamble
print '\n'.join([str(o) for o in short])
print
@@ -193,7 +194,7 @@
p3 = cast_int_to_ptr(i2)
#jump(i2) <- think about it
"""
- self.optimize_loop(ops, expected, expected_short=short)
+ self.optimize_loop(ops, expected) #, expected_short=short)
def test_reverse_of_cast_2(self):
ops = """
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -358,6 +358,11 @@
except AttributeError:
return ""
+class Info(object):
+ def __init__(self, preamble, short_preamble=None):
+ self.preamble = preamble
+ self.short_preamble = short_preamble
+
class Storage(compile.ResumeGuardDescr):
"for tests."
def __init__(self, metainterp_sd=None, original_greenkey=None):
@@ -445,7 +450,7 @@
preamble.inputargs = start_label.getarglist()
preamble.operations = [start_label] + preamble_ops
loop.operations = [end_label] + ops
- return preamble
+ return Info(preamble)
def foo(self):
metainterp_sd = FakeMetaInterpStaticData(self.cpu)
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -15,8 +15,9 @@
class PreambleOp(AbstractResOp):
- def __init__(self, op, info):
+ def __init__(self, op, preamble_op, info):
self.op = op
+ self.preamble_op = preamble_op
self.info = info
def getarg(self, i):
@@ -29,7 +30,7 @@
class UnrollableOptimizer(Optimizer):
def force_op_from_preamble(self, preamble_op):
op = preamble_op.op
- self.optunroll.short.append(op)
+ self.optunroll.short.append(preamble_op.preamble_op)
if preamble_op.info:
preamble_op.info.make_guards(op, self.optunroll.short)
return op
@@ -45,6 +46,7 @@
def __init__(self, metainterp_sd, jitdriver_sd, optimizations):
self.optimizer = UnrollableOptimizer(metainterp_sd, jitdriver_sd,
optimizations)
+ self.short = []
self.optimizer.optunroll = self
def get_virtual_state(self, args):
@@ -219,8 +221,17 @@
return ExportedState([], [])
def import_state(self, targetop, exported_state):
+ # the mapping between input args (from old label) and what we need
+ # to actually emit
for source, target in exported_state.inputarg_mapping:
xxx
+ # import the optimizer state, starting from boxes that can be produced
+ # by short preamble
+ for op, preamble_op in exported_state.short_boxes.items():
+ if preamble_op.is_always_pure():
+ self.pure(op.getopnum(), PreambleOp(op, preamble_op, None))
+ else:
+ yyy
return
self.inputargs = targetop.getarglist()
target_token = targetop.getdescr()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit