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

Reply via email to