Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit