[pypy-commit] pypy optresult-unroll: port some more tests
fijal
noreply at buildbot.pypy.org
Fri Aug 21 13:49:37 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79103:57470787557f
Date: 2015-08-21 13:49 +0200
http://bitbucket.org/pypy/pypy/changeset/57470787557f/
Log: port some more tests
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -374,11 +374,11 @@
def test_intbounds(self):
- value1 = IntBound()
+ value1 = IntUnbounded()
value1.make_ge(IntBound(0, 10))
value1.make_le(IntBound(20, 30))
info1 = NotVirtualStateInfo(self.cpu, 'i', value1)
- info2 = NotVirtualStateInfo(self.cpu, 'i', IntBound())
+ info2 = NotVirtualStateInfo(self.cpu, 'i', IntUnbounded())
expected = """
[i0]
i1 = int_ge(i0, 0)
@@ -386,39 +386,38 @@
i2 = int_le(i0, 30)
guard_true(i2) []
"""
- self.guards(info1, info2, value1, expected)
- self.check_invalid(info1, info2, BoxInt(50))
+ self.guards(info1, info2, InputArgInt(), value1, expected)
+ self.check_invalid(info1, info2, InputArgInt(50))
def test_intbounds_constant(self):
- value1 = IntOptValue(BoxInt(15))
- value1.intbound.make_ge(IntBound(0, 10))
- value1.intbound.make_le(IntBound(20, 30))
- info1 = NotVirtualStateInfo(value1)
- info2 = NotVirtualStateInfo(IntOptValue(ConstInt(10000)))
+ value1 = IntUnbounded()
+ value1.make_ge(IntBound(0, 10))
+ value1.make_le(IntBound(20, 30))
+ info1 = NotVirtualStateInfo(self.cpu, 'i', value1)
+ info2 = NotVirtualStateInfo(self.cpu, 'i', ConstIntBound(10000))
self.check_invalid(info1, info2)
- info1 = NotVirtualStateInfo(value1)
- info2 = NotVirtualStateInfo(IntOptValue(ConstInt(11)))
+ info1 = NotVirtualStateInfo(self.cpu, 'i', value1)
+ info2 = NotVirtualStateInfo(self.cpu, 'i', ConstIntBound(11))
self.check_no_guards(info1, info2)
def test_known_class(self):
- value1 = PtrOptValue(self.nodebox)
- classbox = self.cpu.ts.cls_of_box(self.nodebox)
- value1.make_constant_class(None, classbox)
- info1 = NotVirtualStateInfo(value1)
- info2 = NotVirtualStateInfo(PtrOptValue(self.nodebox))
+ classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+ value1 = info.InstancePtrInfo(classbox)
+ info1 = NotVirtualStateInfo(self.cpu, 'r', value1)
+ info2 = NotVirtualStateInfo(self.cpu, 'r', None)
expected = """
[p0]
guard_nonnull_class(p0, ConstClass(node_vtable)) []
"""
- self.guards(info1, info2, self.nodebox, expected)
- self.check_invalid(info1, info2, BoxPtr())
+ self.guards(info1, info2, InputArgRef(self.nodeaddr), None, expected)
+ self.check_invalid(info1, info2, InputArgRef())
def test_known_class_value(self):
- value1 = PtrOptValue(self.nodebox)
- classbox = self.cpu.ts.cls_of_box(self.nodebox)
- value1.make_constant_class(None, classbox)
- box = self.nodebox
- guards = value1.make_guards(box)
+ classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+ value1 = info.InstancePtrInfo(classbox)
+ box = InputArgRef()
+ guards = []
+ value1.make_guards(box, guards)
expected = """
[p0]
guard_nonnull_class(p0, ConstClass(node_vtable)) []
@@ -426,10 +425,10 @@
self.compare(guards, expected, [box])
def test_known_value(self):
- value1 = PtrOptValue(self.nodebox)
- value1.make_constant(ConstInt(1))
- box = self.nodebox
- guards = value1.make_guards(box)
+ value1 = ConstIntBound(1)
+ box = InputArgInt()
+ guards = []
+ value1.make_guards(box, guards)
expected = """
[i0]
guard_value(i0, 1) []
@@ -437,21 +436,20 @@
self.compare(guards, expected, [box])
def test_equal_inputargs(self):
- value = PtrOptValue(self.nodebox)
- classbox = self.cpu.ts.cls_of_box(self.nodebox)
- value.make_constant_class(None, classbox)
- knownclass_info = NotVirtualStateInfo(value)
+ classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+ value = info.InstancePtrInfo(classbox)
+ knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value)
vstate1 = VirtualState([knownclass_info, knownclass_info])
assert vstate1.generalization_of(vstate1)
- unknown_info1 = NotVirtualStateInfo(PtrOptValue(self.nodebox))
+ unknown_info1 = NotVirtualStateInfo(self.cpu, 'r', None)
vstate2 = VirtualState([unknown_info1, unknown_info1])
assert vstate2.generalization_of(vstate2)
assert not vstate1.generalization_of(vstate2)
assert vstate2.generalization_of(vstate1)
- unknown_info1 = NotVirtualStateInfo(PtrOptValue(self.nodebox))
- unknown_info2 = NotVirtualStateInfo(PtrOptValue(self.nodebox))
+ unknown_info1 = NotVirtualStateInfo(self.cpu, 'r', None)
+ unknown_info2 = NotVirtualStateInfo(self.cpu, 'r', None)
vstate3 = VirtualState([unknown_info1, unknown_info2])
assert vstate3.generalization_of(vstate2)
assert vstate3.generalization_of(vstate1)
@@ -462,24 +460,25 @@
[p0]
guard_nonnull_class(p0, ConstClass(node_vtable)) []
"""
- state = vstate1.generate_guards(vstate2, [value, value], self.cpu)
- self.compare(state.extra_guards, expected, [self.nodebox])
+ box = InputArgRef(self.nodeaddr)
+ state = vstate1.generate_guards(vstate2, [box, box], [None, None],
+ self.cpu)
+ self.compare(state.extra_guards, expected, [box])
with py.test.raises(VirtualStatesCantMatch):
- vstate1.generate_guards(vstate3, [value, value],
+ vstate1.generate_guards(vstate3, [box, box], [None, None],
self.cpu)
with py.test.raises(VirtualStatesCantMatch):
- vstate2.generate_guards(vstate3, [value, value],
+ vstate2.generate_guards(vstate3, [box, box], [None, None],
self.cpu)
def test_generate_guards_on_virtual_fields_matches_array(self):
- innervalue1 = PtrOptValue(self.nodebox)
- constclassbox = self.cpu.ts.cls_of_box(self.nodebox)
- innervalue1.make_constant_class(None, constclassbox)
- innerinfo1 = NotVirtualStateInfo(innervalue1)
+ classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
+ innervalue1 = info.InstancePtrInfo(classbox)
+ innerinfo1 = NotVirtualStateInfo(self.cpu, 'r', innervalue1)
innerinfo1.position = 1
- innerinfo2 = NotVirtualStateInfo(PtrOptValue(self.nodebox))
+ innerinfo2 = NotVirtualStateInfo(self.cpu, 'r', None)
innerinfo2.position = 1
descr = object()
@@ -490,14 +489,15 @@
info2 = VArrayStateInfo(descr)
info2.fieldstate = [innerinfo2]
- value1 = VArrayValue(descr, None, 1, self.nodebox)
- value1._items[0] = PtrOptValue(self.nodebox)
+ value1 = info.ArrayPtrInfo(vdescr=descr, size=1)
+ box = InputArgRef(self.nodeaddr)
+ value1._items[0] = box
expected = """
[p0]
guard_nonnull_class(p0, ConstClass(node_vtable)) []
"""
- self.guards(info1, info2, value1, expected, [self.nodebox])
+ self.guards(info1, info2, InputArgRef(), value1, expected, [box])
def test_generate_guards_on_virtual_fields_matches_instance(self):
innervalue1 = PtrOptValue(self.nodebox)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -21,6 +21,11 @@
self.msg = msg
self.state = state
+def get_forwarded(box):
+ if not isinstance(box, Const):
+ return box.get_forwarded()
+ xxx
+
class GenerateGuardState(object):
def __init__(self, cpu=None, guards=None, renum=None, bad=None):
self.cpu = cpu
@@ -206,8 +211,7 @@
if box is not None:
assert isinstance(opinfo, info.ArrayPtrInfo)
fieldbox = opinfo._items[i]
- xxx
- fieldinfo = fieldbox.get_forwarded()
+ fieldinfo = get_forwarded(fieldbox)
self.fieldstate[i].generate_guards(other.fieldstate[i],
fieldbox, fieldinfo, state)
@@ -309,6 +313,8 @@
self.constbox = info.getconst()
if type == 'r':
self.known_class = info.get_known_class(cpu)
+ elif type == 'i':
+ self.intbound = info
elif type == 'r':
if info:
self.known_class = info.get_known_class(cpu)
More information about the pypy-commit
mailing list