Author: Carl Friedrich Bolz <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit