Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79215:95d9c66d173c Date: 2015-08-25 09:29 +0200 http://bitbucket.org/pypy/pypy/changeset/95d9c66d173c/
Log: merge diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -90,10 +90,13 @@ class SizeDescr(AbstractDescr): def __init__(self, S, vtable, runner): + assert not isinstance(vtable, bool) self.S = S + self._vtable = vtable self._is_object = vtable is not None self.all_fielddescrs = heaptracker.all_fielddescrs(runner, S, get_field_descr=LLGraphCPU.fielddescrof) + self._runner = runner def get_all_fielddescrs(self): return self.all_fielddescrs @@ -101,12 +104,12 @@ def is_object(self): return self._is_object - def as_vtable_size_descr(self): - return self - def get_vtable(self): - return heaptracker.adr2int(llmemory.cast_ptr_to_adr( - self._corresponding_vtable)) + assert self._vtable is not None + if self._vtable is Ellipsis: + self._vtable = heaptracker.get_vtable_for_gcstruct(self._runner, + self.S) + return heaptracker.adr2int(llmemory.cast_ptr_to_adr(self._vtable)) def count_fields_if_immutable(self): return heaptracker.count_fields_if_immutable(self.S) @@ -413,11 +416,14 @@ def sizeof(self, S, vtable): key = ('size', S) try: - return self.descrs[key] + descr = self.descrs[key] except KeyError: descr = SizeDescr(S, vtable, self) self.descrs[key] = descr - return descr + if descr._is_object and vtable is not Ellipsis: + assert vtable + heaptracker.testing_gcstruct2vtable.setdefault(S, vtable) + return descr def fielddescrof(self, S, fieldname): key = ('field', S, fieldname) @@ -426,8 +432,7 @@ except KeyError: descr = FieldDescr(S, fieldname) self.descrs[key] = descr - is_obj = heaptracker.has_gcstruct_a_vtable(S) - descr.parent_descr = self.sizeof(S, is_obj) + descr.parent_descr = self.sizeof(S, Ellipsis) if self.vinfo_for_tests is not None: descr.vinfo = self.vinfo_for_tests return descr @@ -695,7 +700,7 @@ result = lltype.malloc(descr.S, zero=True) result_as_objptr = lltype.cast_pointer(rclass.OBJECTPTR, result) result_as_objptr.typeptr = support.cast_from_int(rclass.CLASSTYPE, - descr._corresponding_vtable) + descr._vtable) return lltype.cast_opaque_ptr(llmemory.GCREF, result) def bh_new_array(self, length, arraydescr): diff --git a/rpython/jit/backend/llsupport/descr.py b/rpython/jit/backend/llsupport/descr.py --- a/rpython/jit/backend/llsupport/descr.py +++ b/rpython/jit/backend/llsupport/descr.py @@ -59,9 +59,6 @@ return False class SizeDescrWithVTable(SizeDescr): - def as_vtable_size_descr(self): - return self - def is_object(self): return True @@ -198,10 +195,10 @@ cachedict = cache.setdefault(STRUCT, {}) cachedict[fieldname] = fielddescr if STRUCT is rclass.OBJECT: - fielddescr.parent_descr = get_size_descr(gccache, STRUCT, None) + vtable = None else: - fielddescr.parent_descr = get_size_descr(gccache, STRUCT, - heaptracker.get_vtable_for_gcstruct(gccache, STRUCT)) + vtable = heaptracker.get_vtable_for_gcstruct(gccache, STRUCT) + fielddescr.parent_descr = get_size_descr(gccache, STRUCT, vtable) return fielddescr def get_type_flag(TYPE): diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py --- a/rpython/jit/backend/llsupport/rewrite.py +++ b/rpython/jit/backend/llsupport/rewrite.py @@ -121,7 +121,8 @@ if op.getopnum() == rop.DEBUG_MERGE_POINT: continue # ---------- GETFIELD_GC ---------- - if op.getopnum() == rop.GETFIELD_GC: + if op.getopnum() in (rop.GETFIELD_GC_I, rop.GETFIELD_GC_F, + rop.GETFIELD_GC_R): self.handle_getfield_gc(op) continue # ---------- turn NEWxxx into CALL_MALLOC_xxx ---------- @@ -194,7 +195,7 @@ followed by a bunch of 'setfields', and the 'pending_zeros' optimization we do here is meant for this case.""" self.emit_pending_zeros() - self.newops.append(op) + self.emit_op(op) # ---------- diff --git a/rpython/jit/backend/llsupport/test/test_pinned_object_rewrite.py b/rpython/jit/backend/llsupport/test/test_pinned_object_rewrite.py --- a/rpython/jit/backend/llsupport/test/test_pinned_object_rewrite.py +++ b/rpython/jit/backend/llsupport/test/test_pinned_object_rewrite.py @@ -8,7 +8,6 @@ from rpython.jit.metainterp.gc import get_description from rpython.jit.tool.oparser import parse from rpython.jit.metainterp.optimizeopt.util import equaloplists -from rpython.jit.codewriter.heaptracker import register_known_gctype from rpython.jit.metainterp.history import JitCellToken, FLOAT from rpython.rtyper.lltypesystem import lltype, rffi, lltype, llmemory from rpython.rtyper import rclass @@ -52,7 +51,6 @@ O = lltype.GcStruct('O', ('parent', rclass.OBJECT), ('x', lltype.Signed)) o_vtable = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True) - register_known_gctype(self.cpu, o_vtable, O) # tiddescr = self.gc_ll_descr.fielddescr_tid wbdescr = self.gc_ll_descr.write_barrier_descr diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py b/rpython/jit/backend/llsupport/test/test_rewrite.py --- a/rpython/jit/backend/llsupport/test/test_rewrite.py +++ b/rpython/jit/backend/llsupport/test/test_rewrite.py @@ -7,7 +7,6 @@ from rpython.jit.metainterp.gc import get_description from rpython.jit.tool.oparser import parse from rpython.jit.metainterp.optimizeopt.util import equaloplists -from rpython.jit.codewriter.heaptracker import register_known_gctype from rpython.jit.metainterp.history import JitCellToken, FLOAT from rpython.jit.metainterp.history import AbstractFailDescr from rpython.rtyper.lltypesystem import lltype, rffi @@ -64,7 +63,6 @@ ('x', lltype.Signed)) o_descr = self.cpu.sizeof(O, True) o_vtable = globals()['o_vtable'] - register_known_gctype(self.cpu, o_vtable, O) # tiddescr = self.gc_ll_descr.fielddescr_tid wbdescr = self.gc_ll_descr.write_barrier_descr diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py --- a/rpython/jit/backend/model.py +++ b/rpython/jit/backend/model.py @@ -8,10 +8,6 @@ total_freed_loops = 0 total_freed_bridges = 0 - # for heaptracker - # _all_size_descrs_with_vtable = None - _vtable_to_descr_dict = None - class AbstractCPU(object): supports_floats = False supports_longlong = False diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py --- a/rpython/jit/backend/test/runner_test.py +++ b/rpython/jit/backend/test/runner_test.py @@ -1820,7 +1820,6 @@ p = p.parent else: descr = cpu.sizeof(T, vtable_for_T) - descr._corresponding_vtable = vtable_for_T t = lltype.malloc(T) if T == self.T: t.parent.parent.typeptr = vtable_for_T @@ -1950,8 +1949,7 @@ cpu = self.cpu t_box, T_box, descr = self.alloc_instance(self.T) vtable = llmemory.cast_adr_to_ptr( - llmemory.cast_int_to_adr(T_box.getint()), heaptracker.VTABLETYPE) - heaptracker.register_known_gctype(cpu, vtable, self.T) + llmemory.cast_int_to_adr(T_box.getint()), rclass.CLASSTYPE) r1 = self.execute_operation(rop.NEW_WITH_VTABLE, [], 'ref', descr) r2 = self.execute_operation(rop.NEW_WITH_VTABLE, [], 'ref', descr) assert r1 != r2 diff --git a/rpython/jit/backend/test/test_ll_random.py b/rpython/jit/backend/test/test_ll_random.py --- a/rpython/jit/backend/test/test_ll_random.py +++ b/rpython/jit/backend/test/test_ll_random.py @@ -123,8 +123,6 @@ vtable.name = rclass.alloc_array_name(name) self.structure_types_and_vtables.append((S, vtable)) # - heaptracker.register_known_gctype(self.cpu, vtable, S) - # return S, vtable def get_random_structure(self, r, has_vtable=False): diff --git a/rpython/jit/backend/x86/test/test_regalloc2.py b/rpython/jit/backend/x86/test/test_regalloc2.py --- a/rpython/jit/backend/x86/test/test_regalloc2.py +++ b/rpython/jit/backend/x86/test/test_regalloc2.py @@ -335,11 +335,7 @@ cls1.subclassrange_min = 1 cls1.subclassrange_max = 3 if S is not None: - descr = cpu.sizeof(S) - if not hasattr(cpu.tracker, '_all_size_descrs_with_vtable'): - cpu.tracker._all_size_descrs_with_vtable = [] - cpu.tracker._all_size_descrs_with_vtable.append(descr) - descr._corresponding_vtable = cls1 + descr = cpu.sizeof(S, cls1) # xxx may be not needed any more return llmemory.cast_adr_to_int(llmemory.cast_ptr_to_adr(cls1), "symbolic") def test_bug_2(): diff --git a/rpython/jit/codewriter/codewriter.py b/rpython/jit/codewriter/codewriter.py --- a/rpython/jit/codewriter/codewriter.py +++ b/rpython/jit/codewriter/codewriter.py @@ -74,7 +74,6 @@ if not count % 500: log.info("Produced %d jitcodes" % count) self.assembler.finished(self.callcontrol.callinfocollection) - heaptracker.finish_registering(self.cpu) log.info("there are %d JitCode instances." % count) def setup_vrefinfo(self, vrefinfo): diff --git a/rpython/jit/codewriter/heaptracker.py b/rpython/jit/codewriter/heaptracker.py --- a/rpython/jit/codewriter/heaptracker.py +++ b/rpython/jit/codewriter/heaptracker.py @@ -67,12 +67,14 @@ if not has_gcstruct_a_vtable(GCSTRUCT): return None setup_cache_gcstruct2vtable(gccache) - return gccache._cache_gcstruct2vtable[GCSTRUCT] + try: + return gccache._cache_gcstruct2vtable[GCSTRUCT] + except KeyError: + return testing_gcstruct2vtable[GCSTRUCT] def setup_cache_gcstruct2vtable(gccache): if not hasattr(gccache, '_cache_gcstruct2vtable'): cache = {} - cache.update(testing_gcstruct2vtable) if gccache.rtyper: for rinstance in gccache.rtyper.instance_reprs.values(): cache[rinstance.lowleveltype.TO] = rinstance.rclass.getvtable() @@ -88,57 +90,6 @@ # ____________________________________________________________ -VTABLETYPE = rclass.CLASSTYPE - -def register_known_gctype(cpu, vtable, STRUCT): - # register the correspondance 'vtable' <-> 'STRUCT' in the cpu - sizedescr = cpu.sizeof(STRUCT, vtable) - assert sizedescr.as_vtable_size_descr() is sizedescr - if getattr(sizedescr, '_corresponding_vtable', None): - assert sizedescr._corresponding_vtable == vtable - return - assert lltype.typeOf(vtable) == VTABLETYPE - if not hasattr(cpu.tracker, '_all_size_descrs_with_vtable'): - cpu.tracker._all_size_descrs_with_vtable = [] - cpu.tracker._vtable_to_descr_dict = None - cpu.tracker._all_size_descrs_with_vtable.append(sizedescr) - sizedescr._corresponding_vtable = vtable - -def finish_registering(cpu): - # annotation hack for small examples which have no vtable at all - #if not hasattr(cpu.tracker, '_all_size_descrs_with_vtable'): - # vtable = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True) - # register_known_gctype(cpu, vtable, rclass.OBJECT) - pass - -def vtable2descr(cpu, vtable): - assert lltype.typeOf(vtable) is lltype.Signed - vtable = int2adr(vtable) - if we_are_translated(): - # Build the dict {vtable: sizedescr} at runtime. - # This is necessary because the 'vtables' are just pointers to - # static data, so they can't be used as keys in prebuilt dicts. - d = cpu.tracker._vtable_to_descr_dict - if d is None: - d = cpu.tracker._vtable_to_descr_dict = {} - for descr in cpu.tracker._all_size_descrs_with_vtable: - key = descr._corresponding_vtable - key = llmemory.cast_ptr_to_adr(key) - d[key] = descr - return d[vtable] - else: - vtable = llmemory.cast_adr_to_ptr(vtable, VTABLETYPE) - for descr in cpu.tracker._all_size_descrs_with_vtable: - if descr._corresponding_vtable == vtable: - return descr - raise KeyError(vtable) - -def descr2vtable(cpu, descr): - from rpython.jit.metainterp import history - assert isinstance(descr, history.AbstractDescr) - vtable = descr.as_vtable_size_descr()._corresponding_vtable - vtable = llmemory.cast_ptr_to_adr(vtable) - return adr2int(vtable) def all_fielddescrs(gccache, STRUCT, only_gc=False, res=None, get_field_descr=None): diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py --- a/rpython/jit/codewriter/jtransform.py +++ b/rpython/jit/codewriter/jtransform.py @@ -932,7 +932,6 @@ return self._do_builtin_call(op, 'alloc_with_del', [], extra=(RESULT, vtable), extrakey=STRUCT) - heaptracker.register_known_gctype(self.cpu, vtable, STRUCT) opname = 'new_with_vtable' else: opname = 'new' @@ -1936,10 +1935,6 @@ # VirtualRefs. def _handle_virtual_ref_call(self, op, oopspec_name, args): - vrefinfo = self.callcontrol.virtualref_info - heaptracker.register_known_gctype(self.cpu, - vrefinfo.jit_virtual_ref_vtable, - vrefinfo.JIT_VIRTUAL_REF) return SpaceOperation(oopspec_name, list(args), op.result) # ----------- diff --git a/rpython/jit/codewriter/test/test_codewriter.py b/rpython/jit/codewriter/test/test_codewriter.py --- a/rpython/jit/codewriter/test/test_codewriter.py +++ b/rpython/jit/codewriter/test/test_codewriter.py @@ -25,8 +25,6 @@ class FakeSizeDescr(AbstractDescr): def __init__(self, STRUCT): self.STRUCT = STRUCT - def as_vtable_size_descr(self): - return self class FakeArrayDescr(AbstractDescr): def __init__(self, ARRAY): diff --git a/rpython/jit/codewriter/test/test_flatten.py b/rpython/jit/codewriter/test/test_flatten.py --- a/rpython/jit/codewriter/test/test_flatten.py +++ b/rpython/jit/codewriter/test/test_flatten.py @@ -39,8 +39,6 @@ self.oopspecindex = oopspecindex def __repr__(self): return '<Descr>' - def as_vtable_size_descr(self): - return self class FakeDict(object): def __getitem__(self, key): diff --git a/rpython/jit/codewriter/test/test_jtransform.py b/rpython/jit/codewriter/test/test_jtransform.py --- a/rpython/jit/codewriter/test/test_jtransform.py +++ b/rpython/jit/codewriter/test/test_jtransform.py @@ -50,8 +50,7 @@ return FakeDescr(('sizedescr', STRUCT)) class FakeDescr(tuple): - def as_vtable_size_descr(self): - return self + pass class FakeLink: args = [] @@ -569,9 +568,6 @@ op1 = Transformer(cpu).rewrite_operation(op) assert op1.opname == 'new_with_vtable' assert op1.args == [('sizedescr', S)] - #assert heaptracker.descr2vtable(cpu, op1.args[0]) == vtable [type check] - vtable_int = heaptracker.adr2int(llmemory.cast_ptr_to_adr(vtable)) - assert heaptracker.vtable2descr(cpu, vtable_int) == op1.args[0] def test_malloc_new_with_destructor(): vtable = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True) diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py --- a/rpython/jit/metainterp/optimizeopt/info.py +++ b/rpython/jit/metainterp/optimizeopt/info.py @@ -242,6 +242,11 @@ if self.size != -1: self.buffer = RawBuffer(cpu, None) + def _get_buffer(self): + buffer = self.buffer + assert buffer is not None + return buffer + def getitem_raw(self, offset, itemsize, descr): if not self.is_virtual(): raise InvalidRawOperation @@ -249,37 +254,39 @@ # for the test above: it's not enough to check is_virtual() # on the original object, because it might be a VRawSliceValue # instead. If it is a virtual one, then we'll reach here anway. - return self.buffer.read_value(offset, itemsize, descr) + return self._get_buffer().read_value(offset, itemsize, descr) def setitem_raw(self, offset, itemsize, descr, itemop): if not self.is_virtual(): raise InvalidRawOperation - self.buffer.write_value(offset, itemsize, descr, itemop) + self._get_buffer().write_value(offset, itemsize, descr, itemop) def is_virtual(self): return self.size != -1 def _force_elements(self, op, optforce, descr): self.size = -1 - for i in range(len(self.buffer.offsets)): + buffer = self._get_buffer() + for i in range(len(buffer.offsets)): # write the value - offset = self.buffer.offsets[i] - descr = self.buffer.descrs[i] - itembox = self.buffer.values[i] + offset = buffer.offsets[i] + descr = buffer.descrs[i] + itembox = buffer.values[i] setfield_op = ResOperation(rop.RAW_STORE, [op, ConstInt(offset), itembox], descr=descr) optforce.emit_operation(setfield_op) def _visitor_walk_recursive(self, op, visitor, optimizer): - itemboxes = self.buffer.values + itemboxes = self._get_buffer().values visitor.register_virtual_fields(op, itemboxes) # there can be no virtuals stored in raw buffer @specialize.argtype(1) def visitor_dispatch_virtual_type(self, visitor): + buffer = self._get_buffer() return visitor.visit_vrawbuffer(self.size, - self.buffer.offsets[:], - self.buffer.descrs[:]) + buffer.offsets[:], + buffer.descrs[:]) class RawStructPtrInfo(AbstractRawPtrInfo): def __init__(self): diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py --- a/rpython/jit/metainterp/optimizeopt/test/test_util.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py @@ -12,7 +12,6 @@ from rpython.jit.metainterp.optimizeopt.util import sort_descrs, equaloplists from rpython.jit.codewriter.effectinfo import EffectInfo from rpython.jit.metainterp.logger import LogOperations -from rpython.jit.codewriter.heaptracker import register_known_gctype from rpython.jit.tool.oparser import OpParser from rpython.jit.metainterp.quasiimmut import QuasiImmutDescr from rpython.jit.metainterp import compile, resume, history @@ -122,9 +121,9 @@ myptr2 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(NODE)) nullptr = lltype.nullptr(llmemory.GCREF.TO) #nodebox2 = InputArgRef(lltype.cast_opaque_ptr(llmemory.GCREF, node2)) - nodesize = cpu.sizeof(NODE, True) - nodesize2 = cpu.sizeof(NODE2, True) - nodesize3 = cpu.sizeof(NODE3, True) + nodesize = cpu.sizeof(NODE, node_vtable) + nodesize2 = cpu.sizeof(NODE2, node_vtable2) + nodesize3 = cpu.sizeof(NODE3, node_vtable3) valuedescr = cpu.fielddescrof(NODE, 'value') floatdescr = cpu.fielddescrof(NODE, 'floatval') chardescr = cpu.fielddescrof(NODE, 'charval') @@ -140,7 +139,7 @@ QUASI = lltype.GcStruct('QUASIIMMUT', ('inst_field', lltype.Signed), ('mutate_field', rclass.OBJECTPTR), hints={'immutable_fields': accessor}) - quasisize = cpu.sizeof(QUASI, False) + quasisize = cpu.sizeof(QUASI, None) quasi = lltype.malloc(QUASI, immortal=True) quasi.inst_field = -4247 quasifielddescr = cpu.fielddescrof(QUASI, 'inst_field') @@ -163,8 +162,8 @@ intobj_immut_vtable = lltype.malloc(OBJECT_VTABLE, immortal=True) noimmut_intval = cpu.fielddescrof(INTOBJ_NOIMMUT, 'intval') immut_intval = cpu.fielddescrof(INTOBJ_IMMUT, 'intval') - noimmut_descr = cpu.sizeof(INTOBJ_NOIMMUT, True) - immut_descr = cpu.sizeof(INTOBJ_IMMUT, True) + noimmut_descr = cpu.sizeof(INTOBJ_NOIMMUT, intobj_noimmut_vtable) + immut_descr = cpu.sizeof(INTOBJ_IMMUT, intobj_immut_vtable) PTROBJ_IMMUT = lltype.GcStruct('PTROBJ_IMMUT', ('parent', OBJECT), ('ptrval', lltype.Ptr(OBJECT)), @@ -179,7 +178,7 @@ # a GcStruct not inheriting from OBJECT S = lltype.GcStruct('TUPLE', ('a', lltype.Signed), ('abis', lltype.Signed), ('b', lltype.Ptr(NODE))) - ssize = cpu.sizeof(S, False) + ssize = cpu.sizeof(S, None) adescr = cpu.fielddescrof(S, 'a') abisdescr = cpu.fielddescrof(S, 'abis') bdescr = cpu.fielddescrof(S, 'b') @@ -202,7 +201,7 @@ inst_w_list = cpu.fielddescrof(W_ROOT, 'inst_w_list') w_root_vtable = lltype.malloc(OBJECT_VTABLE, immortal=True) - tsize = cpu.sizeof(T, False) + tsize = cpu.sizeof(T, None) cdescr = cpu.fielddescrof(T, 'c') ddescr = cpu.fielddescrof(T, 'd') arraydescr3 = cpu.arraydescrof(lltype.GcArray(lltype.Ptr(NODE))) @@ -215,10 +214,10 @@ SIMPLE = lltype.GcStruct('simple', ('parent', OBJECT), ('value', lltype.Signed)) - simpledescr = cpu.sizeof(SIMPLE, True) simplevalue = cpu.fielddescrof(SIMPLE, 'value') simple_vtable = lltype.malloc(OBJECT_VTABLE, immortal=True) - usize = cpu.sizeof(U, True) + simpledescr = cpu.sizeof(SIMPLE, simple_vtable) + #usize = cpu.sizeof(U, ...) onedescr = cpu.fielddescrof(U, 'one') FUNC = lltype.FuncType([lltype.Signed], lltype.Signed) @@ -350,18 +349,7 @@ jit_virtual_ref_vtable = vrefinfo.jit_virtual_ref_vtable jvr_vtable_adr = llmemory.cast_ptr_to_adr(jit_virtual_ref_vtable) - vref_descr = cpu.sizeof(vrefinfo.JIT_VIRTUAL_REF, False) - - register_known_gctype(cpu, node_vtable, NODE) - register_known_gctype(cpu, node_vtable2, NODE2) - register_known_gctype(cpu, node_vtable3, NODE3) - register_known_gctype(cpu, u_vtable, U) - register_known_gctype(cpu, simple_vtable, SIMPLE) - register_known_gctype(cpu, jit_virtual_ref_vtable,vrefinfo.JIT_VIRTUAL_REF) - register_known_gctype(cpu, intobj_noimmut_vtable, INTOBJ_NOIMMUT) - register_known_gctype(cpu, intobj_immut_vtable, INTOBJ_IMMUT) - register_known_gctype(cpu, ptrobj_immut_vtable, PTROBJ_IMMUT) - register_known_gctype(cpu, w_root_vtable, W_ROOT) + vref_descr = cpu.sizeof(vrefinfo.JIT_VIRTUAL_REF, jit_virtual_ref_vtable) namespace = locals() diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py --- a/rpython/jit/metainterp/optimizeopt/virtualize.py +++ b/rpython/jit/metainterp/optimizeopt/virtualize.py @@ -1,5 +1,4 @@ from rpython.jit.codewriter.effectinfo import EffectInfo -from rpython.jit.codewriter.heaptracker import descr2vtable from rpython.jit.metainterp.history import ConstInt from rpython.jit.metainterp.history import CONST_NULL from rpython.jit.metainterp.optimizeopt import info, optimizer @@ -199,7 +198,7 @@ self.emit_operation(op) def optimize_NEW_WITH_VTABLE(self, op): - known_class = ConstInt(descr2vtable(self.optimizer.cpu, op.getdescr())) + known_class = ConstInt(op.getdescr().get_vtable()) self.make_virtual(known_class, op, op.getdescr()) def optimize_NEW(self, op): diff --git a/rpython/jit/metainterp/test/test_compile.py b/rpython/jit/metainterp/test/test_compile.py --- a/rpython/jit/metainterp/test/test_compile.py +++ b/rpython/jit/metainterp/test/test_compile.py @@ -89,8 +89,6 @@ metainterp.history = History() metainterp.history.operations = loop.operations[:-1] metainterp.history.inputargs = loop.inputargs[:] - cpu.tracker._all_size_descrs_with_vtable = ( - LLtypeMixin.cpu.tracker._all_size_descrs_with_vtable) # greenkey = 'faked' target_token = compile_loop(metainterp, greenkey, 0, diff --git a/rpython/jit/metainterp/test/test_warmspot.py b/rpython/jit/metainterp/test/test_warmspot.py --- a/rpython/jit/metainterp/test/test_warmspot.py +++ b/rpython/jit/metainterp/test/test_warmspot.py @@ -597,8 +597,7 @@ self._no = no class FakeDescr: - def as_vtable_size_descr(self): - return self + pass class FakeCPU(object): supports_floats = False _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit