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