Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79482:ae007118e6b3 Date: 2015-09-06 21:25 +0200 http://bitbucket.org/pypy/pypy/changeset/ae007118e6b3/
Log: port some of test_virtualstate diff --git a/rpython/jit/metainterp/optimizeopt/TODO b/rpython/jit/metainterp/optimizeopt/TODO --- a/rpython/jit/metainterp/optimizeopt/TODO +++ b/rpython/jit/metainterp/optimizeopt/TODO @@ -3,3 +3,4 @@ * reenable cpu check (breaks --fork-before) * reenable jit iface * fix OS X, win, arm, 32bit +* reenable the int_add optimization 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 @@ -7,6 +7,7 @@ from rpython.jit.metainterp.history import ConstInt, ConstPtr from rpython.jit.metainterp.resoperation import InputArgInt, InputArgRef,\ InputArgFloat +from rpython.jit.backend.llgraph.runner import ArrayDescr from rpython.rtyper.lltypesystem import lltype, llmemory from rpython.rtyper import rclass from rpython.jit.metainterp.optimizeopt.test.test_util import LLtypeMixin, BaseTest, \ @@ -26,12 +27,20 @@ self.optearlyforce = None class BaseTestGenerateGuards(BaseTest): - def guards(self, info1, info2, box, opinfo, expected, inputargs=None): + def setup_class(self): + classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr)) + value = info.InstancePtrInfo(None, classbox) + self.knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) + classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr)) + value = info.InstancePtrInfo(None, classbox) + self.knownclass_info2 = NotVirtualStateInfo(self.cpu, 'r', value) + + def guards(self, info1, info2, box, runtime_box, expected, inputargs=None): if inputargs is None: inputargs = [box] info1.position = info2.position = 0 state = GenerateGuardState(FakeOptimizer(self.cpu)) - info1.generate_guards(info2, box, opinfo, state) + info1.generate_guards(info2, box, runtime_box, state) self.compare(state.extra_guards, expected, inputargs) def compare(self, guards, expected, inputargs): @@ -445,59 +454,58 @@ def test_equal_inputargs(self): classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr)) - value = info.InstancePtrInfo(classbox) + value = info.InstancePtrInfo(None, classbox) knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) vstate1 = VirtualState([knownclass_info, knownclass_info]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) 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) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) + assert vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) 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) - assert not vstate2.generalization_of(vstate3) - assert not vstate1.generalization_of(vstate3) + assert vstate3.generalization_of(vstate2, FakeOptimizer(self.cpu)) + assert vstate3.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate2.generalization_of(vstate3, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate3, FakeOptimizer(self.cpu)) expected = """ [p0] guard_nonnull_class(p0, ConstClass(node_vtable)) [] """ box = InputArgRef(self.nodeaddr) - state = vstate1.generate_guards(vstate2, [box, box], [None, None], - self.cpu) + state = vstate1.generate_guards(vstate2, [box, box], [box, box], + FakeOptimizer(self.cpu)) self.compare(state.extra_guards, expected, [box]) with py.test.raises(VirtualStatesCantMatch): vstate1.generate_guards(vstate3, [box, box], [None, None], - self.cpu) + FakeOptimizer(self.cpu)) with py.test.raises(VirtualStatesCantMatch): vstate2.generate_guards(vstate3, [box, box], [None, None], - self.cpu) + FakeOptimizer(self.cpu)) def test_generate_guards_on_virtual_fields_matches_array(self): classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr)) - innervalue1 = info.InstancePtrInfo(classbox) + innervalue1 = info.InstancePtrInfo(None, classbox) innerinfo1 = NotVirtualStateInfo(self.cpu, 'r', innervalue1) innerinfo1.position = 1 innerinfo2 = NotVirtualStateInfo(self.cpu, 'r', None) innerinfo2.position = 1 - descr = object() - + descr = ArrayDescr(lltype.GcArray(llmemory.GCREF), self.cpu) info1 = VArrayStateInfo(descr) info1.fieldstate = [innerinfo1] info2 = VArrayStateInfo(descr) info2.fieldstate = [innerinfo2] - value1 = info.ArrayPtrInfo(descr, vdescr=descr, size=1) + value1 = info.ArrayPtrInfo(descr, size=1, is_virtual=True) box = InputArgRef(self.nodeaddr) value1._items[0] = box @@ -505,11 +513,16 @@ [p0] guard_nonnull_class(p0, ConstClass(node_vtable)) [] """ - self.guards(info1, info2, InputArgRef(), value1, expected, [box]) + array = lltype.malloc(lltype.GcArray(llmemory.GCREF), 1) + array[0] = self.nodeaddr + arrayaddr = lltype.cast_opaque_ptr(llmemory.GCREF, array) + runtime_box = InputArgRef(arrayaddr) + runtime_box._forwarded = value1 + self.guards(info1, info2, runtime_box, runtime_box, expected, [box]) def test_generate_guards_on_virtual_fields_matches_instance(self): classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr)) - innervalue1 = info.InstancePtrInfo(classbox) + innervalue1 = info.InstancePtrInfo(None, classbox) innerinfo1 = NotVirtualStateInfo(self.cpu, 'r', innervalue1) innerinfo1.position = 1 innerinfo2 = NotVirtualStateInfo(self.cpu, 'r', None) @@ -521,285 +534,280 @@ info2 = VirtualStateInfo(ConstInt(42), [self.nextdescr]) info2.fieldstate = [innerinfo2] - value1 = info.InstancePtrInfo(classbox, self.nodesize) + value1 = info.InstancePtrInfo(self.nodesize, classbox, is_virtual=True) nodebox = InputArgRef(self.nodeaddr) + node2box = InputArgRef(self.nodeaddr) value1._fields = [None] * (self.nextdescr.get_index() + 1) - value1._fields[self.nextdescr.get_index()] = nodebox + value1._fields[self.nextdescr.get_index()] = node2box expected = """ [p0] guard_nonnull_class(p0, ConstClass(node_vtable)) [] """ - self.guards(info1, info2, nodebox, value1, expected, [nodebox]) + runtime_box = InputArgRef(self.nodeaddr) + nodebox._forwarded = value1 + self.guards(info1, info2, nodebox, runtime_box, expected, [node2box]) def test_generate_guards_on_virtual_fields_matches_struct(self): - innervalue1 = PtrOptValue(self.nodebox) - constclassbox = self.cpu.ts.cls_of_box(self.nodebox) - innervalue1.make_constant_class(None, constclassbox) - innerinfo1 = NotVirtualStateInfo(innervalue1) + constclassbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr)) + innervalue1 = info.InstancePtrInfo(None, constclassbox) + innerinfo1 = NotVirtualStateInfo(self.cpu, 'r', innervalue1) innerinfo1.position = 1 - innerinfo2 = NotVirtualStateInfo(PtrOptValue(self.nodebox)) + innerinfo2 = NotVirtualStateInfo(self.cpu, 'r', None) innerinfo2.position = 1 - structdescr = object() + structdescr = self.nodesize - info1 = VStructStateInfo(structdescr, [1]) + info1 = VStructStateInfo(structdescr, [self.nextdescr]) info1.fieldstate = [innerinfo1] - info2 = VStructStateInfo(structdescr, [1]) + info2 = VStructStateInfo(structdescr, [self.nextdescr]) info2.fieldstate = [innerinfo2] - value1 = VStructValue(self.cpu, structdescr, self.nodebox) - value1._fields = {1: PtrOptValue(self.nodebox)} + node2box = InputArgRef(self.nodeaddr) + value1 = info.InstancePtrInfo(structdescr, None, is_virtual=True) + value1._fields = [None] * (self.nextdescr.get_index() + 1) + value1._fields[self.nextdescr.get_index()] = node2box expected = """ [p0] guard_nonnull_class(p0, ConstClass(node_vtable)) [] """ - self.guards(info1, info2, value1, expected, [self.nodebox]) + nodebox = InputArgRef(self.nodeaddr) + nodebox._forwarded = value1 + runtime_box = InputArgRef(self.nodeaddr) + self.guards(info1, info2, nodebox, runtime_box, expected, + [node2box]) def test_generate_guards_on_virtual_fields_matches_arraystruct(self): - innervalue1 = PtrOptValue(self.nodebox) - constclassbox = self.cpu.ts.cls_of_box(self.nodebox) - innervalue1.make_constant_class(None, constclassbox) - innerinfo1 = NotVirtualStateInfo(innervalue1) + constclassbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr)) + innervalue1 = info.InstancePtrInfo(None, constclassbox) + innerinfo1 = NotVirtualStateInfo(self.cpu, 'r', innervalue1) innerinfo1.position = 1 - innerinfo2 = NotVirtualStateInfo(PtrOptValue(self.nodebox)) + innerinfo2 = NotVirtualStateInfo(self.cpu, 'r', None) innerinfo2.position = 1 - arraydescr = object() - fielddescr = object() + NODE = lltype.Struct('NODE', ('x', llmemory.GCREF)) + ARRAY = lltype.GcArray(NODE) + descr = self.cpu.fielddescrof(NODE, 'x') + + arraydescr = self.cpu.arraydescrof(ARRAY) - info1 = VArrayStructStateInfo(arraydescr, [[fielddescr]]) + info1 = VArrayStructStateInfo(arraydescr, [descr], 1) info1.fieldstate = [innerinfo1] - info2 = VArrayStructStateInfo(arraydescr, [[fielddescr]]) + info2 = VArrayStructStateInfo(arraydescr, [descr], 1) info2.fieldstate = [innerinfo2] - value1 = VArrayStructValue(arraydescr, 1, self.nodebox) - value1._items[0][fielddescr] = PtrOptValue(self.nodebox) + node = lltype.malloc(ARRAY, 1) + node[0].x = self.nodeaddr + nodeaddr = lltype.cast_opaque_ptr(llmemory.GCREF, node) + node2box = InputArgRef(self.nodeaddr) + value1 = info.ArrayStructInfo(arraydescr, 1, is_virtual=True) + value1._items = [node2box] expected = """ [p0] guard_nonnull_class(p0, ConstClass(node_vtable)) [] """ - self.guards(info1, info2, value1, expected, [self.nodebox]) + nodebox = InputArgRef(self.nodeaddr) + nodebox._forwarded = value1 + runtime_box = InputArgRef(nodeaddr) + self.guards(info1, info2, nodebox, runtime_box, expected, + [node2box]) # _________________________________________________________________________ # the below tests don't really have anything to do with guard generation def test_virtuals_with_equal_fields(self): info1 = VirtualStateInfo(ConstInt(42), [1, 2]) - value = PtrOptValue(self.nodebox) - classbox = self.cpu.ts.cls_of_box(self.nodebox) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) - info1.fieldstate = [knownclass_info, knownclass_info] + info1.fieldstate = [self.knownclass_info, self.knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VirtualStateInfo(ConstInt(42), [1, 2]) - unknown_info1 = NotVirtualStateInfo(OptValue(self.nodebox)) + unknown_info1 = NotVirtualStateInfo(self.cpu, 'r', + info.InstancePtrInfo()) info2.fieldstate = [unknown_info1, unknown_info1] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) - assert not vstate1.generalization_of(vstate2) - assert vstate2.generalization_of(vstate1) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) + assert vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) info3 = VirtualStateInfo(ConstInt(42), [1, 2]) - unknown_info1 = NotVirtualStateInfo(OptValue(self.nodebox)) - unknown_info2 = NotVirtualStateInfo(OptValue(self.nodebox)) + unknown_info1 = NotVirtualStateInfo(self.cpu, 'r', + info.InstancePtrInfo()) + unknown_info2 = NotVirtualStateInfo(self.cpu, 'r', + info.InstancePtrInfo()) info3.fieldstate = [unknown_info1, unknown_info2] vstate3 = VirtualState([info3]) - assert vstate3.generalization_of(vstate2) - assert vstate3.generalization_of(vstate1) - assert not vstate2.generalization_of(vstate3) - assert not vstate1.generalization_of(vstate3) + assert vstate3.generalization_of(vstate2, FakeOptimizer(self.cpu)) + assert vstate3.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate2.generalization_of(vstate3, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate3, FakeOptimizer(self.cpu)) def test_virtuals_with_nonmatching_fields(self): info1 = VirtualStateInfo(ConstInt(42), [1, 2]) - 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(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info1.fieldstate = [knownclass_info, knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VirtualStateInfo(ConstInt(42), [1, 2]) - value = PtrOptValue(self.nodebox2) - classbox = self.cpu.ts.cls_of_box(self.nodebox2) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) + classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr)) + value = info.InstancePtrInfo(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info2.fieldstate = [knownclass_info, knownclass_info] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_virtuals_with_nonmatching_descrs(self): info1 = VirtualStateInfo(ConstInt(42), [10, 20]) - 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(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info1.fieldstate = [knownclass_info, knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VirtualStateInfo(ConstInt(42), [1, 2]) - value = PtrOptValue(self.nodebox2) - classbox = self.cpu.ts.cls_of_box(self.nodebox2) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) + classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr)) + value = info.InstancePtrInfo(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info2.fieldstate = [knownclass_info, knownclass_info] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_virtuals_with_nonmatching_classes(self): info1 = VirtualStateInfo(ConstInt(42), [1, 2]) - 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(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info1.fieldstate = [knownclass_info, knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VirtualStateInfo(ConstInt(7), [1, 2]) - value = PtrOptValue(self.nodebox2) - classbox = self.cpu.ts.cls_of_box(self.nodebox2) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) + classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr)) + value = info.InstancePtrInfo(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info2.fieldstate = [knownclass_info, knownclass_info] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_nonvirtual_is_not_virtual(self): info1 = VirtualStateInfo(ConstInt(42), [1, 2]) - 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(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info1.fieldstate = [knownclass_info, knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) - info2 = NotVirtualStateInfo(value) + info2 = NotVirtualStateInfo(self.cpu, 'r', value) vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_arrays_with_nonmatching_fields(self): info1 = VArrayStateInfo(42) - 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(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info1.fieldstate = [knownclass_info, knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VArrayStateInfo(42) - value = PtrOptValue(self.nodebox2) - classbox = self.cpu.ts.cls_of_box(self.nodebox2) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) + classbox = self.cpu.ts.cls_of_box(InputArgRef(self.node2addr)) + value = info.InstancePtrInfo(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info2.fieldstate = [knownclass_info, knownclass_info] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_arrays_of_different_sizes(self): info1 = VArrayStateInfo(42) - 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(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info1.fieldstate = [knownclass_info, knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VArrayStateInfo(42) - 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.node2addr)) + value = info.InstancePtrInfo(None, classbox) + knownclass_info = NotVirtualStateInfo(self.cpu, 'r', value) info2.fieldstate = [knownclass_info] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_arrays_with_nonmatching_types(self): info1 = VArrayStateInfo(42) - value = PtrOptValue(self.nodebox) - classbox = self.cpu.ts.cls_of_box(self.nodebox) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) - info1.fieldstate = [knownclass_info, knownclass_info] + info1.fieldstate = [self.knownclass_info, self.knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) info2 = VArrayStateInfo(7) - value = PtrOptValue(self.nodebox2) - classbox = self.cpu.ts.cls_of_box(self.nodebox2) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) - info2.fieldstate = [knownclass_info, knownclass_info] + info2.fieldstate = [self.knownclass_info2, self.knownclass_info2] vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_nonvirtual_is_not_array(self): info1 = VArrayStateInfo(42) - value = PtrOptValue(self.nodebox) - classbox = self.cpu.ts.cls_of_box(self.nodebox) - value.make_constant_class(None, classbox) - knownclass_info = NotVirtualStateInfo(value) - info1.fieldstate = [knownclass_info, knownclass_info] + info1.fieldstate = [self.knownclass_info, self.knownclass_info] vstate1 = VirtualState([info1]) - assert vstate1.generalization_of(vstate1) + assert vstate1.generalization_of(vstate1, FakeOptimizer(self.cpu)) - info2 = NotVirtualStateInfo(value) - vstate2 = VirtualState([info2]) - assert vstate2.generalization_of(vstate2) + vstate2 = VirtualState([self.knownclass_info]) + assert vstate2.generalization_of(vstate2, FakeOptimizer(self.cpu)) - assert not vstate2.generalization_of(vstate1) - assert not vstate1.generalization_of(vstate2) + assert not vstate2.generalization_of(vstate1, FakeOptimizer(self.cpu)) + assert not vstate1.generalization_of(vstate2, FakeOptimizer(self.cpu)) def test_crash_varay_clear(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(None, classbox) + innerinfo1 = NotVirtualStateInfo(self.cpu, 'r', innervalue1) innerinfo1.position = 1 innerinfo1.position_in_notvirtuals = 0 - descr = object() + descr = self.cpu.arraydescrof(lltype.GcArray(llmemory.GCREF)) info1 = VArrayStateInfo(descr) info1.fieldstate = [innerinfo1] - constvalue = self.cpu.ts.CVAL_NULLREF - value1 = VArrayValue(descr, constvalue, 1, self.nodebox, clear=True) - value1._items[0] = constvalue - info1.enum_forced_boxes([None], value1, None) + value1 = info.ArrayPtrInfo(descr, + ConstPtr(lltype.nullptr(llmemory.GCREF.TO)), + 1, True, is_virtual=True) + value1._items[0] = ConstPtr(lltype.nullptr(llmemory.GCREF.TO)) + nodebox = InputArgRef() + nodebox._forwarded = value1 + info1.enum_forced_boxes([None], nodebox, FakeOptimizer(self.cpu)) class BaseTestBridges(BaseTest): enable_opts = "intbounds:rewrite:virtualize:string:pure:heap:unroll" @@ -830,16 +838,16 @@ bridge = self.parse(bridge, postprocess=self.postprocess) self.add_guard_future_condition(bridge) for loop in loops: - loop.preamble = self.unroll_and_optimize(loop) + loop.preamble = self.unroll_and_optimize(loop).preamble preamble = loops[0].preamble token = JitCellToken() token.target_tokens = [l.operations[0].getdescr() for l in [preamble] + loops] boxes = {} - for b in bridge.inputargs + [op.result for op in bridge.operations]: + for b in bridge.inputargs + [op for op in bridge.operations]: boxes[str(b)] = b - for b, v in boxvalues.items(): - boxes[b].value = v + #for b, v in boxvalues.items(): + # boxes[b].value = v bridge.operations[-1].setdescr(token) self._do_optimize_bridge(bridge, None) if bridge.operations[-1].getopnum() == rop.LABEL: @@ -864,7 +872,7 @@ def test_nonnull(self): loop = """ [p0] - p1 = getfield_gc(p0, descr=nextdescr) + p1 = getfield_gc_r(p0, descr=nextdescr) jump(p0) """ bridge = """ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit