[pypy-commit] pypy optimizeopt-cleanup: Don't pass the optimizer around unnecessarily
rlamy
pypy.commits at gmail.com
Mon May 27 18:43:37 EDT 2019
Author: Ronan Lamy <ronan.lamy at 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]
- at given(strategies.lists(strategies.builds(IntFrontendOp, strategies.just(0)) | intconsts,
- min_size=1))
+ at 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):
More information about the pypy-commit
mailing list