[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