Author: Carl Friedrich Bolz <cfb...@gmx.de>
Branch: guard-compatible
Changeset: r85354:6846f0cd8655
Date: 2016-06-22 14:16 +0200
http://bitbucket.org/pypy/pypy/changeset/6846f0cd8655/

Log:    call base methods consistently in make_guards

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
@@ -117,6 +117,7 @@
     def make_guards(self, op, short, optimizer):
         op = ResOperation(rop.GUARD_NONNULL, [op])
         short.append(op)
+        return PtrInfo.make_guards(self, op, short, optimizer)
 
 class AbstractVirtualPtrInfo(NonNullPtrInfo):
     _attrs_ = ('_cached_vinfo', 'descr', '_is_virtual')
@@ -327,20 +328,17 @@
         return visitor.visit_virtual(self.descr, fielddescrs)
 
     def make_guards(self, op, short, optimizer):
+        AbstractStructPtrInfo.make_guards(self, op, short, optimizer)
         if self._known_class is not None:
-            short.append(ResOperation(rop.GUARD_NONNULL, [op]))
             if not optimizer.cpu.remove_gctypeptr:
                 short.append(ResOperation(rop.GUARD_IS_OBJECT, [op]))
             short.append(ResOperation(rop.GUARD_CLASS,
                                       [op, self._known_class]))
         elif self.descr is not None:
-            short.append(ResOperation(rop.GUARD_NONNULL, [op]))
             if not optimizer.cpu.remove_gctypeptr:
                 short.append(ResOperation(rop.GUARD_IS_OBJECT, [op]))
             short.append(ResOperation(rop.GUARD_SUBCLASS, [op,
                             ConstInt(self.descr.get_vtable())]))
-        else:
-            AbstractStructPtrInfo.make_guards(self, op, short, optimizer)
 
 class StructPtrInfo(AbstractStructPtrInfo):
     def __init__(self, descr, is_virtual=False):
@@ -348,12 +346,10 @@
         self._is_virtual = is_virtual
 
     def make_guards(self, op, short, optimizer):
+        AbstractStructPtrInfo.make_guards(self, op, short, optimizer)
         if self.descr is not None:
             c_typeid = ConstInt(self.descr.get_type_id())
-            short.extend([
-                ResOperation(rop.GUARD_NONNULL, [op]),
-                ResOperation(rop.GUARD_GC_TYPE, [op, c_typeid])
-            ])
+            short.append(ResOperation(rop.GUARD_GC_TYPE, [op, c_typeid]))
 
     @specialize.argtype(1)
     def visitor_dispatch_virtual_type(self, visitor):
@@ -675,6 +671,8 @@
         return self._const
 
     def make_guards(self, op, short, optimizer):
+        # don't call base method, all other guards are irrelevant if it's a
+        # constant
         short.append(ResOperation(rop.GUARD_VALUE, [op, self._const]))
 
     def _get_info(self, descr, optheap):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py 
b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -454,6 +454,17 @@
         """
         self.compare(guards, expected, [box])
 
+    def test_guard_nonnull(self):
+        value1 = info.NonNullPtrInfo()
+        box = InputArgRef()
+        guards = []
+        value1.make_guards(box, guards, FakeOptimizer(self.cpu))
+        expected = """
+        [p0]
+        guard_nonnull(p0) []
+        """
+        self.compare(guards, expected, [box])
+
     def test_equal_inputargs(self):
         classbox = self.cpu.ts.cls_of_box(InputArgRef(self.nodeaddr))
         value = info.InstancePtrInfo(None, classbox)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to