Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79424:9a6b88a2d07c
Date: 2015-09-04 15:54 +0200
http://bitbucket.org/pypy/pypy/changeset/9a6b88a2d07c/

Log:    post test_unroll

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py 
b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -10,7 +10,7 @@
 from rpython.jit.metainterp.history import (TreeLoop, ConstInt,
                                             JitCellToken, TargetToken)
 from rpython.jit.metainterp.resoperation import rop, ResOperation,\
-     InputArgRef
+     InputArgRef, InputArgInt
 from rpython.jit.metainterp.optimizeopt.shortpreamble import \
      ShortPreambleBuilder, PreambleOp, ShortInputArg
 from rpython.jit.metainterp.compile import LoopCompileData
@@ -23,9 +23,15 @@
 class FakeOptimizer(object):
     optearlyforce = None
 
+    class cpu:
+        remove_gctypeptr = True
+
     def getptrinfo(self, box):
         return box.get_forwarded()
 
+    def setinfo_from_preamble(self, *args):
+        pass
+
     def get_box_replacement(self, box):
         return box
      
@@ -83,9 +89,7 @@
         assert vs.make_inputargs([1], FakeOptimizer()) == []
         assert vs.state[0].level == LEVEL_CONSTANT
         # we have exported values for i1, which happens to be an inputarg
-        assert es.inputarg_mapping[0][1].getint() == 1
-        assert isinstance(es.inputarg_mapping[0][1], ConstInt)
-        sb = ShortPreambleBuilder(es.short_boxes, es.short_inputargs,
+        sb = ShortPreambleBuilder([], es.short_boxes, es.short_inputargs,
                                   es.exported_infos)
         sp = sb.build_short_preamble()
         exp = """
@@ -116,7 +120,10 @@
         assert isinstance(vs.state[0], NotVirtualStateInfo)
         assert vs.state[0].level == LEVEL_UNKNOWN
         op = preamble.operations[0]
-        assert es.short_boxes[0].short_op.res is op
+        short_boxes = [box for box in es.short_boxes
+                       if not isinstance(box.short_op, ShortInputArg)]
+        assert len(short_boxes) == 1
+        assert short_boxes[0].short_op.res is op
 
     def test_guard_class(self):
         loop = """
@@ -134,47 +141,47 @@
 
     def test_virtual(self):
         loop = """
-        [p1, p2]
-        p0 = new_with_vtable(descr=nodesize)
-        setfield_gc(p0, 1, descr=valuedescr)
-        setfield_gc(p0, p1, descr=nextdescr)
-        jump(p0, p0)
+        [p1, p2, i3]
+        p0 = new_with_vtable(descr=simpledescr)
+        setfield_gc(p0, i3, descr=simplevalue)
+        jump(p0, p0, i3)
         """
         es, loop, preamble = self.optimize(loop)
         vs = es.virtual_state
         assert vs.state[0] is vs.state[1]
         assert isinstance(vs.state[0], VirtualStateInfo)
         assert isinstance(vs.state[0].fieldstate[0], NotVirtualStateInfo)
-        assert vs.state[0].fieldstate[0].level == LEVEL_CONSTANT
-        assert isinstance(vs.state[0].fieldstate[3], NotVirtualStateInfo)
-        assert vs.state[0].fieldstate[3].level == LEVEL_UNKNOWN
+        assert vs.state[0].fieldstate[0].level == LEVEL_UNKNOWN
         assert vs.numnotvirtuals == 1
         p = InputArgRef()
-        py.test.raises(BadVirtualState, vs.make_inputargs, [p, p],
-                       FakeOptimizer())
-        ptrinfo = info.StructPtrInfo(self.nodesize)
-        p2 = InputArgRef()
-        ptrinfo._fields = [None, None, None, p2]
+        i = InputArgInt()
+        ptrinfo = info.StructPtrInfo(self.nodesize, is_virtual=True)
+        ptrinfo._fields = [i]
         p.set_forwarded(ptrinfo)
-        vs.make_inputargs([p, p], FakeOptimizer())
+        vs.make_inputargs([p, p, i], FakeOptimizer())
 
-    def test_short_boxes_heapcache(self):
+    def test_short_boxes_heapcache(self):        
         loop = """
         [p0, i1]
         i0 = getfield_gc_i(p0, descr=valuedescr)
-        jump(p0, i0)
+        jump(p0, i1)
         """
         es, loop, preamble = self.optimize(loop)
         op = preamble.operations[0]
-        assert len(es.short_boxes) == 1
-        assert es.short_boxes[0].short_op.res is op
-        sb = ShortPreambleBuilder(es.short_boxes, es.short_inputargs,
-                                  es.exported_infos)
+        short_boxes = [box for box in es.short_boxes
+                       if not isinstance(box.short_op, ShortInputArg)]
+        assert len(short_boxes) == 1
+        assert short_boxes[0].short_op.res is op
+        sb = ShortPreambleBuilder(loop.inputargs,
+                                  es.short_boxes, es.short_inputargs,
+                                  es.exported_infos, FakeOptimizer())
         op = preamble.operations[0]
-        short_op = sb.use_box(op)
-        sb.add_preamble_op(PreambleOp(op, short_op))
+        short_op = sb.use_box(op, short_boxes[0].preamble_op, FakeOptimizer())
+        sb.add_preamble_op(PreambleOp(op, short_op, False))
         exp_short = """
         [p0, i1]
+        guard_nonnull(p0) []
+        guard_subclass(p0, ConstClass(node_vtable)) []
         i0 = getfield_gc_i(p0, descr=valuedescr)
         jump(i0)
         """
@@ -189,7 +196,9 @@
         """
         es, loop, preamble = self.optimize(loop)
         op = preamble.operations[0]
-        assert es.short_boxes[0].short_op.res is op
+        short_boxes = [box for box in es.short_boxes
+                       if not isinstance(box.short_op, ShortInputArg)]
+        assert short_boxes[0].short_op.res is op
         assert es.exported_infos[op].is_constant()
 
     def test_only_setfield(self):
@@ -201,10 +210,12 @@
         """
         es, loop, preamble = self.optimize(loop)
         p0, p1 = es.short_inputargs
-        assert es.short_boxes[0].short_op.res.getint() == 5
-        assert es.short_boxes[1].short_op.res.getint() == 5
-        assert es.short_boxes[0].preamble_op.getarg(0) is p0
-        assert es.short_boxes[1].preamble_op.getarg(0) is p1
+        short_boxes = [box for box in es.short_boxes
+                       if not isinstance(box.short_op, ShortInputArg)]
+        assert short_boxes[0].short_op.res.getint() == 5
+        assert short_boxes[1].short_op.res.getint() == 5
+        assert short_boxes[0].preamble_op.getarg(0) is p0
+        assert short_boxes[1].preamble_op.getarg(0) is p1
 
     def test_double_getfield_plus_pure(self):
         loop = """
@@ -216,7 +227,7 @@
         jump(p0)
         """
         es, loop, preamble = self.optimize(loop)
-        assert len(es.short_boxes) == 3
+        assert len(es.short_boxes) == 4
         # both getfields are available as
         # well as getfield_gc_pure
         
@@ -233,8 +244,7 @@
         jump(i1, p1, p2)
         """
         es, loop, preamble = self.optimize(loop)
-        assert len(producable_short_boxes(es.short_boxes)) == 2
-        xxx
+        assert len(producable_short_boxes(es.short_boxes)) == 1
 
     def test_setfield_forced_virtual(self):
         loop = """
@@ -245,30 +255,23 @@
         jump(p2, p3)
         """
         es, loop, preamble = self.optimize(loop)
-        sb = ShortPreambleBuilder(es.short_boxes, es.short_inputargs,
+        sb = ShortPreambleBuilder(loop.inputargs, es.short_boxes,
+                                  es.short_inputargs,
                                   es.exported_infos)
-        assert len(sb.producable_ops) == 1
-        op = sb.producable_ops.keys()[0]
-        pop = sb.use_box(op)
-        sb.add_preamble_op(PreambleOp(op, pop))
+        short_boxes = [box for box in es.short_boxes
+                       if not isinstance(box.short_op, ShortInputArg)]
+        op = short_boxes[0].short_op.res
+        pop = sb.use_box(op, short_boxes[0].preamble_op, FakeOptimizer())
+        sb.add_preamble_op(PreambleOp(op, pop, False))
         exp_short = """
-        [p0]
+        [p0, p1]
+        guard_nonnull(p0) []
+        guard_subclass(p0, ConstClass(node_vtable)) []
         i1 = getfield_gc_i(p0, descr=valuedescr)
         jump(i1)
         """
         self.compare_short(sb.build_short_preamble(), exp_short)
 
-    def test_no_short_boxes(self):
-        loop = """
-        [p0, p1]
-        p2 = escape_r(p0)
-        p3 = escape_r(p1)
-        setfield_gc(p2, p3, descr=nextdescr)
-        jump(p2, p3)
-        """
-        es, loop, preamble = self.optimize(loop)
-        assert not es.short_boxes
-
     def test_loopinvariant(self):
         loop = """
         [i1]
@@ -278,7 +281,7 @@
         jump(i1)
         """
         es, loop, preamble = self.optimize(loop)
-        assert len(es.short_boxes) == 1
+        assert len(es.short_boxes) == 2
 
     def test_circular_force(self):
         ops = """
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to