Author: Maciej Fijalkowski <fij...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit