Author: Maciej Fijalkowski <fij...@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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit