Author: Ronan Lamy <ronan.l...@gmail.com> Branch: optimizeopt-cleanup Changeset: r96708:3df8ad2225a4 Date: 2019-05-27 20:01 +0100 http://bitbucket.org/pypy/pypy/changeset/3df8ad2225a4/
Log: Don't pass the optimizer around unnecessarily 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 @@ -141,7 +141,7 @@ constptr = optforce.optimizer.constant_fold(op) op.set_forwarded(constptr) self._is_virtual = False - self._force_elements_immutable(self.descr, constptr, optforce) + self._force_elements_immutable(self.descr, constptr, optforce.optimizer) return constptr # op.set_forwarded(None) @@ -302,12 +302,12 @@ return False # not a constant at all return True - def _force_elements_immutable(self, descr, constptr, optforce): + def _force_elements_immutable(self, descr, constptr, optimizer): for i, fielddescr in enumerate(descr.get_all_fielddescrs()): fld = self._fields[i] - subbox = optforce.optimizer.force_box(fld) + subbox = optimizer.force_box(fld) assert isinstance(subbox, Const) - execute(optforce.optimizer.cpu, None, rop.SETFIELD_GC, + execute(optimizer.cpu, None, rop.SETFIELD_GC, fielddescr, constptr, subbox) class InstancePtrInfo(AbstractStructPtrInfo): 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 @@ -703,12 +703,12 @@ def already_seen_virtual(self, keybox): return keybox in self.fieldboxes - def create_state_or_none(self, box, opt): + def create_state_or_none(self, box): if box is None: return None - return self.create_state(box, opt) + return self.create_state(box) - def create_state(self, box, opt): + def create_state(self, box): box = get_box_replacement(box) try: return self.info[box] @@ -720,7 +720,7 @@ result = info.visitor_dispatch_virtual_type(self) self.info[box] = result info.visitor_walk_recursive(box, self) - result.fieldstate = [self.create_state_or_none(b, opt) + result.fieldstate = [self.create_state_or_none(b) for b in self.fieldboxes[box]] else: result = self.visit_not_virtual(box) @@ -733,14 +733,10 @@ return result def get_virtual_state(self, jump_args): - if self.optimizer.optearlyforce: - opt = self.optimizer.optearlyforce - else: - opt = self.optimizer state = [] self.info = {} for box in jump_args: - state.append(self.create_state(box, opt)) + state.append(self.create_state(box)) return VirtualState(state) def visit_not_virtual(self, box): diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py --- a/rpython/jit/metainterp/resume.py +++ b/rpython/jit/metainterp/resume.py @@ -256,7 +256,7 @@ numb_state.num_boxes = num_boxes numb_state.num_virtuals = num_virtuals - def number(self, optimizer, position, trace): + def number(self, position, trace): snapshot_iter = trace.get_snapshot_iter(position) numb_state = NumberingState(snapshot_iter.size) numb_state.append_int(0) # patch later: size of resume section @@ -390,7 +390,7 @@ fieldboxes = [] for box in _fieldboxes: if box is not None: - box = self.optimizer.get_box_replacement(box) + box = box.get_box_replacement() fieldboxes.append(box) self.vfieldboxes[virtualbox] = fieldboxes self._register_boxes(fieldboxes) @@ -417,7 +417,6 @@ def finish(self, pending_setfields=[]): from rpython.jit.metainterp.optimizeopt.info import ( getrawptrinfo, getptrinfo) - optimizer = self.optimizer # compute the numbering storage = self.storage # make sure that nobody attached resume data to this guard yet @@ -425,8 +424,7 @@ resume_position = self.guard_op.rd_resume_position assert resume_position >= 0 # count stack depth - numb_state = self.memo.number(optimizer, - resume_position, optimizer.trace) + numb_state = self.memo.number(resume_position, self.trace) self.liveboxes_from_env = liveboxes_from_env = numb_state.liveboxes num_virtuals = numb_state.num_virtuals self.liveboxes = {} @@ -451,12 +449,14 @@ for setfield_op in pending_setfields: box = setfield_op.getarg(0) - box = optimizer.get_box_replacement(box) + if box is not None: + box = box.get_box_replacement() if setfield_op.getopnum() == rop.SETFIELD_GC: fieldbox = setfield_op.getarg(1) else: fieldbox = setfield_op.getarg(2) - fieldbox = optimizer.get_box_replacement(fieldbox) + if fieldbox is not None: + fieldbox = fieldbox.get_box_replacement() self.register_box(box) self.register_box(fieldbox) info = getptrinfo(fieldbox) @@ -464,7 +464,7 @@ info.visitor_walk_recursive(fieldbox, self) self._number_virtuals(liveboxes, num_virtuals) - self._add_pending_fields(optimizer, pending_setfields) + self._add_pending_fields(pending_setfields) numb_state.patch(1, len(liveboxes)) @@ -519,8 +519,7 @@ info = getptrinfo(virtualbox) assert info.is_virtual() assert isinstance(info, AbstractVirtualPtrInfo) - fieldnums = [self._gettagged(box) - for box in fieldboxes] + fieldnums = [self._gettagged(box) for box in fieldboxes] vinfo = self.make_virtual_info(info, fieldnums) # if a new vinfo instance is made, we get the fieldnums list we # pass in as an attribute. hackish. @@ -540,19 +539,21 @@ return True return False - def _add_pending_fields(self, optimizer, pending_setfields): + def _add_pending_fields(self, pending_setfields): + from rpython.jit.metainterp.optimizeopt.util import ( + get_box_replacement) rd_pendingfields = lltype.nullptr(PENDINGFIELDSP.TO) if pending_setfields: n = len(pending_setfields) rd_pendingfields = lltype.malloc(PENDINGFIELDSP.TO, n) for i in range(n): op = pending_setfields[i] - box = optimizer.get_box_replacement(op.getarg(0)) + box = get_box_replacement(op.getarg(0)) descr = op.getdescr() opnum = op.getopnum() if opnum == rop.SETARRAYITEM_GC: fieldbox = op.getarg(2) - boxindex = optimizer.get_box_replacement(op.getarg(1)) + boxindex = op.getarg(1).get_box_replacement() itemindex = boxindex.getint() # sanity: it's impossible to run code with SETARRAYITEM_GC # with negative index, so this guard cannot ever fail; @@ -564,8 +565,7 @@ itemindex = -1 else: raise AssertionError - fieldbox = optimizer.get_box_replacement(fieldbox) - #descr, box, fieldbox, itemindex = pending_setfields[i] + fieldbox = get_box_replacement(fieldbox) lldescr = annlowlevel.cast_instance_to_base_ptr(descr) num = self._gettagged(box) fieldnum = self._gettagged(fieldbox) diff --git a/rpython/jit/metainterp/test/test_resume.py b/rpython/jit/metainterp/test/test_resume.py --- a/rpython/jit/metainterp/test/test_resume.py +++ b/rpython/jit/metainterp/test/test_resume.py @@ -836,7 +836,7 @@ iter = t.get_iter() b1, b2, b3, b4, b5 = iter.inputargs - numb_state = memo.number(FakeOptimizer(), 0, iter) + numb_state = memo.number(0, iter) numb = numb_state.create_numbering() assert numb_state.num_virtuals == 0 @@ -852,7 +852,7 @@ False, [], []) snap2.prev = snap - numb_state2 = memo.number(FakeOptimizer(), 1, iter) + numb_state2 = memo.number(1, iter) numb2 = numb_state2.create_numbering() assert numb_state2.num_virtuals == 0 @@ -876,7 +876,7 @@ # renamed b3.set_forwarded(c4) - numb_state3 = memo.number(FakeOptimizer(), 2, iter) + numb_state3 = memo.number(2, iter) numb3 = numb_state3.create_numbering() assert numb_state3.num_virtuals == 0 @@ -892,7 +892,7 @@ snap4.prev = snap b4.set_forwarded(FakeVirtualInfo(True)) - numb_state4 = memo.number(FakeOptimizer(), 3, iter) + numb_state4 = memo.number(3, iter) numb4 = numb_state4.create_numbering() assert numb_state4.num_virtuals == 1 @@ -911,7 +911,7 @@ b4.set_forwarded(FakeVirtualInfo(True)) b5.set_forwarded(FakeVirtualInfo(True)) - numb_state5 = memo.number(FakeOptimizer(), 4, iter) + numb_state5 = memo.number(4, iter) numb5 = numb_state5.create_numbering() assert numb_state5.num_virtuals == 2 @@ -923,8 +923,9 @@ 2, 1, tag(3, TAGINT), tag(0, TAGVIRTUAL), tag(0, TAGBOX), tag(3, TAGINT) ] + [0, 0] -@given(strategies.lists(strategies.builds(IntFrontendOp, strategies.just(0)) | intconsts, - min_size=1)) +@given(strategies.lists( + strategies.builds(IntFrontendOp, strategies.just(0)) | intconsts, + min_size=1)) def test_ResumeDataLoopMemo_random(lst): inpargs = [box for box in lst if not isinstance(box, Const)] metainterp_sd = FakeMetaInterpStaticData() @@ -933,7 +934,7 @@ i = t.get_iter() t.create_top_snapshot(FakeJitCode("", 0), 0, Frame(lst), False, [], []) memo = ResumeDataLoopMemo(metainterp_sd) - numb_state = memo.number(FakeOptimizer(), 0, i) + numb_state = memo.number(0, i) numb = numb_state.create_numbering() l = unpack_numbering(numb) assert l[0] == len(l) @@ -1386,7 +1387,7 @@ liveboxes = [] modifier._number_virtuals(liveboxes, 0) assert liveboxes == [b2s, b4s] or liveboxes == [b4s, b2s] - modifier._add_pending_fields(FakeOptimizer(), [ + modifier._add_pending_fields([ ResOperation(rop.SETFIELD_GC, [b2s, b4s], descr=LLtypeMixin.nextdescr)]) storage.rd_consts = memo.consts[:] storage.rd_numb = Numbering([0]) @@ -1415,7 +1416,7 @@ pass storage = Storage() modifier = ResumeDataVirtualAdder(None, storage, storage, None, None) - modifier._add_pending_fields(None, []) + modifier._add_pending_fields([]) assert not storage.rd_pendingfields # class FieldDescr(AbstractDescr): @@ -1428,9 +1429,8 @@ b = IntFrontendOp(0) modifier.liveboxes_from_env = {a: rffi.cast(rffi.SHORT, 1042), b: rffi.cast(rffi.SHORT, 1061)} - modifier._add_pending_fields(FakeOptimizer(), [ - ResOperation(rop.SETFIELD_GC, [a, b], - descr=field_a)]) + modifier._add_pending_fields( + [ResOperation(rop.SETFIELD_GC, [a, b], descr=field_a)]) pf = storage.rd_pendingfields assert len(pf) == 1 assert (annlowlevel.cast_base_ptr_to_instance(FieldDescr, pf[0].lldescr) @@ -1450,7 +1450,7 @@ a61: rffi.cast(rffi.SHORT, 1061), a62: rffi.cast(rffi.SHORT, 1062), a63: rffi.cast(rffi.SHORT, 1063)} - modifier._add_pending_fields(FakeOptimizer(), [ + modifier._add_pending_fields([ ResOperation(rop.SETARRAYITEM_GC, [a42, ConstInt(0), a61], descr=array_a), ResOperation(rop.SETARRAYITEM_GC, [a42, ConstInt(2147483647), a62], @@ -1469,11 +1469,10 @@ assert rffi.cast(lltype.Signed, pf[1].itemindex) == 2147483647 # if sys.maxint >= 2147483648: - py.test.raises(TagOverflow, modifier._add_pending_fields, - FakeOptimizer(), - [ResOperation(rop.SETARRAYITEM_GC, - [a42, ConstInt(2147483648), a63], - descr=array_a)]) + with py.test.raises(TagOverflow): + modifier._add_pending_fields( + [ResOperation(rop.SETARRAYITEM_GC, + [a42, ConstInt(2147483648), a63], descr=array_a)]) def test_resume_reader_fields_and_arrayitems(): class ResumeReader(AbstractResumeDataReader): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit