Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79025:a6e577ab0c1a
Date: 2015-08-17 22:00 +0200
http://bitbucket.org/pypy/pypy/changeset/a6e577ab0c1a/

Log:    fix the short preamble deal, not 100% just yet, but getting there

diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -246,8 +246,7 @@
                                descr=start_descr)
     mid_descr_token = TargetToken(jitcell_token,
                                   original_jitcell_token=jitcell_token)
-    mid_label = ResOperation(rop.LABEL, start_state.end_args +
-                             loop_info.extra_label_args,
+    mid_label = ResOperation(rop.LABEL, loop_info.label_args,
                              descr=mid_descr_token)
     # XXX assign short preamble and virtual state
     loop_ops[-1].setdescr(mid_descr_token)
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py 
b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -137,7 +137,7 @@
             v1, v2 = v2, v1
         # if both are constant, the pure optimization will deal with it
         if v2.is_constant() and not v1.is_constant():
-            if not self.optimizer.is_inputarg(arg1):
+            if False and not self.optimizer.is_inputarg(arg1):
                 if arg1.getopnum() == rop.INT_ADD:
                     prod_arg1 = arg1.getarg(0)
                     prod_arg2 = arg1.getarg(1)
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -337,6 +337,7 @@
         return op
 
     def is_inputarg(self, op):
+        #return True
         return op in self.inparg_dict
 
     def get_constant_box(self, box):
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py 
b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -198,7 +198,7 @@
         assert not invented_name
 
     def __repr__(self):
-        return "INP(%r)" % (self.preamble_op,)
+        return "INP(%r -> %r)" % (self.res, self.preamble_op)
 
 class ShortBoxes(object):
     """ This is a container used for creating all the exported short
@@ -209,16 +209,15 @@
         # of AbstractShortOp
         self.potential_ops = OrderedDict()
         self.produced_short_boxes = {}
+        self.short_inputargs = []
         # a way to produce const boxes, e.g. setfield_gc(p0, Const).
         # We need to remember those, but they don't produce any new boxes
         self.const_short_boxes = []
-        label_d = {}
-        for arg in label_args:
-            label_d[arg] = None
-        for box in inputargs:
-            if box in label_d:
-                renamed = OpHelpers.inputarg_from_tp(box.type)
-                self.potential_ops[box] = ShortInputArg(box, renamed)
+        for i in range(len(inputargs)):
+            box = inputargs[i]
+            renamed = OpHelpers.inputarg_from_tp(box.type)
+            self.potential_ops[box] = ShortInputArg(label_args[i], renamed)
+            self.short_inputargs.append(renamed)
 
         optimizer.produce_potential_short_preamble_ops(self)
 
@@ -295,6 +294,7 @@
         return pop
 
     def create_short_inputargs(self, label_args):
+        return self.short_inputargs
         short_inpargs = []
         for i in range(len(label_args)):
             inparg = self.produced_short_boxes.get(label_args[i], None)
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
@@ -8687,5 +8687,36 @@
         """
         self.optimize_loop(ops, expected, preamble)
 
+    def test_loop_variant_mul1(self):
+        ops = """
+        [i3, i4, i5]
+        i6 = int_mul(i5, i5)
+        i7 = int_add(i4, i6)
+        i9 = int_add(i5, 1)
+        i10 = int_mul(i9, i9)
+        i11 = int_add(i7, i10)
+        i13 = int_sub(i3, 1)
+        i15 = int_gt(i13, 0)
+        guard_true(i15) []
+        jump(i13, i11, i9)
+        """
+        expected = """
+        [i8, i7, i5, i6]
+        i10 = int_add(i7, i6)
+        i11 = int_add(i5, 1)
+        i12 = int_mul(i11, i11)
+        i13 = int_add(i10, i12)
+        i14 = int_sub(i8, 1)
+        i15 = int_gt(i14, 0)
+        guard_true(i15) []
+        jump(i14, i13, i11, i12)
+        """
+        expected_short = """
+        [i16, i17, i18]
+        i19 = int_mul(i18, i18)
+        jump(i19)
+        """
+        self.optimize_loop(ops, expected, expected_short=expected_short)
+
 class TestLLtype(OptimizeOptTest, LLtypeMixin):
     pass
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
@@ -194,6 +194,7 @@
         self.short_preamble_producer = ShortPreambleBuilder(
             exported_state.short_boxes, exported_state.short_inputargs,
             exported_state.exported_infos, self.optimizer)
+
         for produced_op in exported_state.short_boxes:
             produced_op.produce_op(self, exported_state.exported_infos)
 
diff --git a/rpython/jit/metainterp/test/test_ajit.py 
b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -80,14 +80,14 @@
         self.check_resops({'jump': 1, 'int_gt': 2, 'int_add': 2,
                            'guard_true': 2, 'int_sub': 2})
 
-        if 0 and self.basic:
+        if self.basic:
             found = 0
             for op in get_stats().get_all_loops()[0]._all_operations():
                 if op.getopname() == 'guard_true':
                     liveboxes = op.getfailargs()
                     assert len(liveboxes) == 3
                     for box in liveboxes:
-                        assert isinstance(box, history.BoxInt)
+                        assert box.type == 'i'
                     found += 1
             assert found == 2
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to