Author: Spenser Bauman <[email protected]>
Branch: value-classes
Changeset: r87457:d227639f3fa6
Date: 2016-09-29 21:48 -0400
http://bitbucket.org/pypy/pypy/changeset/d227639f3fa6/

Log:    Fixes for unpacking const pointers

diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -329,7 +329,6 @@
                         guard.setdescr(compile.ResumeAtPositionDescr())
                     self.send_extra_operation(guard)
             except VirtualStatesCantMatch as e:
-                print "*** failing with: ", e.msg
                 continue
 
             # When force_boxes == True, creating the virtual args can fail when
@@ -340,7 +339,6 @@
                     args, self.optimizer, force_boxes=force_boxes)
             except VirtualStatesCantMatch as e:
                 assert force_boxes
-                print "*** failing with: ", e.msg
                 virtual_state = self.get_virtual_state(args)
                 continue
 
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
@@ -1,7 +1,7 @@
 from rpython.jit.metainterp.walkvirtual import VirtualVisitor
 from rpython.jit.metainterp.history import ConstInt, ConstPtr, ConstFloat
 from rpython.jit.metainterp.optimizeopt.info import ArrayPtrInfo,\
-     ArrayStructInfo, AbstractStructPtrInfo, ConstPtrInfo
+     ArrayStructInfo, AbstractStructPtrInfo, ConstPtrInfo, InstancePtrInfo
 from rpython.jit.metainterp.optimizeopt.intutils import \
      MININT, MAXINT, IntBound, IntLowerBound, IntUnbounded
 from rpython.jit.metainterp.resoperation import rop, ResOperation, \
@@ -216,32 +216,27 @@
         return (isinstance(other, VirtualStateInfo) and
                 self.typedescr is other.typedescr)
 
-    @specialize.argtype(4)
-    def getfield(self, box, info, descr, optimizer):
+    def getfield(self, box, info, descr, optimizer, send_to=None):
         assert isinstance(info, AbstractStructPtrInfo)
         field = info.getfield(descr, optimizer)
         if field is not None:
             return field
         opnum = rop.getfield_for_descr(descr)
         getfield = ResOperation(opnum, [box], descr=descr)
-        if isinstance(optimizer, list):
-            optimizer.append(getfield)
+        if send_to is not None:
+            send_to.append(getfield)
         else:
-            from rpython.jit.metainterp.optimizeopt import Optimizer
-            assert isinstance(optimizer, Optimizer)
             optimizer.send_extra_operation(getfield)
-        info.setfield(descr, None, getfield)
+        struct = optimizer.get_box_replacement(box)
+        info.setfield(descr, struct, getfield)
         return getfield
 
     def make_virtual_copy(self, box, info, optimizer):
-        optvirtualize = optimizer.optvirtualize
+        newop = ResOperation(rop.NEW_WITH_VTABLE, [], descr=self.typedescr)
+        optimizer.send_extra_operation(newop)
+        opinfo = optimizer.getptrinfo(newop)
+        assert isinstance(opinfo, InstancePtrInfo)
 
-        if isinstance(box, ConstPtr):
-            # Wrap const pointers in SAME_AS_R operation to cloning via
-            # make_virtual, which expects a ResOperation with an opnum.
-            box = ResOperation(rop.SAME_AS_R, [box])
-
-        opinfo = optvirtualize.make_virtual(self.known_class, box, 
self.typedescr)
         for i in range(len(info._fields)):
             descr = self.fielddescrs[i]
             opinfo._fields[i] = self.getfield(box, info, descr, optimizer)
@@ -333,7 +328,8 @@
         # AbstractVirtualStateInfo._generate_guards
         for i, descr in enumerate(self.fielddescrs):
             if runtime_box is not None and opinfo is not None:
-                fieldbox = self.getfield(box, opinfo, descr, extra_guards)
+                fieldbox = self.getfield(box, opinfo, descr, optimizer,
+                                         send_to=extra_guards)
                 fieldbox_runtime = state.get_runtime_field(runtime_box, descr)
             else:
                 opnum = rop.getfield_for_descr(descr)
diff --git a/rpython/jit/metainterp/test/test_virtual.py 
b/rpython/jit/metainterp/test/test_virtual.py
--- a/rpython/jit/metainterp/test/test_virtual.py
+++ b/rpython/jit/metainterp/test/test_virtual.py
@@ -1045,6 +1045,8 @@
             return 0
 
         self.meta_interp(f, [])
+        loop = get_stats().loops[0]
+        # import pdb; pdb.set_trace()
 
     def test_avoid_preamble_3(self):
         driver = JitDriver(greens=[], reds=['i', 'val'])
@@ -1085,6 +1087,8 @@
             return 0
 
         self.meta_interp(f, [])
+        loop = get_stats().loops[0]
+        # import pdb; pdb.set_trace()
 
     def test_avoid_preamble_4(self):
         driver = JitDriver(greens=[], reds=['i', 'acc', 'val'])
@@ -1119,7 +1123,7 @@
 
         self.meta_interp(f, [])
         loop = get_stats().loops[0]
-        import pdb; pdb.set_trace()
+        # import pdb; pdb.set_trace()
 
     def test_aliased_virtual_states(self):
         # All cases are covered when forcing one component of the virtual state
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to