[pypy-commit] pypy optresult: one more test

fijal noreply at buildbot.pypy.org
Fri Mar 6 18:42:35 CET 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r76259:be5ec91a624a
Date: 2015-03-06 19:24 +0200
http://bitbucket.org/pypy/pypy/changeset/be5ec91a624a/

Log:	one more test

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
@@ -15,6 +15,10 @@
 MODE_STR     = '\x01'
 MODE_UNICODE = '\x02'
 
+INFO_NULL = 0
+INFO_NONNULL = 1
+INFO_UNKNOWN = 2
+
 class AbstractInfo(AbstractValue):
     is_info_class = True
 
@@ -31,6 +35,13 @@
     def is_null(self):
         return False
 
+    def getnullness(self):
+        if self.is_null():
+            return INFO_NULL
+        elif self.is_nonnull():
+            return INFO_NONNULL
+        return INFO_UNKNOWN
+
     
 class NonNullPtrInfo(PtrInfo):
     _attrs_ = ()
@@ -96,6 +107,9 @@
     def is_nonnull(self):
         return bool(self._const.getref_base())
 
+    def is_virtual(self):
+        return False
+
     def get_known_class(self, cpu):
         if not self._const.nonnull():
             return None
diff --git a/rpython/jit/metainterp/optimizeopt/intutils.py b/rpython/jit/metainterp/optimizeopt/intutils.py
--- a/rpython/jit/metainterp/optimizeopt/intutils.py
+++ b/rpython/jit/metainterp/optimizeopt/intutils.py
@@ -1,7 +1,8 @@
 from rpython.rlib.rarithmetic import ovfcheck, LONG_BIT, maxint, is_valid_int
 from rpython.rlib.objectmodel import we_are_translated
 from rpython.jit.metainterp.resoperation import rop, ResOperation
-from rpython.jit.metainterp.optimizeopt.info import AbstractInfo
+from rpython.jit.metainterp.optimizeopt.info import AbstractInfo, INFO_NONNULL,\
+     INFO_UNKNOWN, INFO_NULL
 from rpython.jit.metainterp.history import ConstInt
 
 
@@ -261,15 +262,13 @@
         self.intersect(IntBound(0, 1))
 
     def getnullness(self):
-        from rpython.jit.metainterp.optimizeopt import optimizer
-
         if self.known_gt(IntBound(0, 0)) or \
            self.known_lt(IntBound(0, 0)):
-            return optimizer.INFO_NONNULL
+            return INFO_NONNULL
         if self.known_ge(IntBound(0, 0)) and \
            self.known_le(IntBound(0, 0)):
-            return optimizer.INFO_NULL
-        return optimizer.INFO_UNKNOWN
+            return INFO_NULL
+        return INFO_UNKNOWN
 
 def IntUpperBound(upper):
     b = IntBound(lower=0, upper=upper)
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -257,9 +257,6 @@
 llhelper.CONST_NULLREF = llhelper.CONST_NULL
 REMOVED = AbstractResOp()
 
-INFO_NULL = 0
-INFO_NONNULL = 1
-INFO_UNKNOWN = 2
 
 class Optimization(object):
     next_optimization = None
@@ -291,7 +288,12 @@
     def getnullness(self, op):
         if op.type == 'i':
             return self.getintbound(op).getnullness()
-        xxxx
+        elif op.type == 'r':
+            ptrinfo = self.getptrinfo(op)
+            if ptrinfo is None:
+                return info.INFO_UNKNOWN
+            return ptrinfo.getnullness()
+        assert False
 
     def make_constant_class(self, op, class_const):
         op = self.get_box_replacement(op)
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -1,12 +1,13 @@
 from rpython.jit.codewriter.effectinfo import EffectInfo
 from rpython.jit.codewriter import longlong
 from rpython.jit.metainterp import compile
-from rpython.jit.metainterp.history import (Const, ConstInt, BoxInt, BoxFloat,
-    BoxPtr, make_hashable_int, ConstFloat)
+from rpython.jit.metainterp.history import (Const, ConstInt, make_hashable_int,
+                                            ConstFloat)
 from rpython.jit.metainterp.optimize import InvalidLoop
 from rpython.jit.metainterp.optimizeopt.intutils import IntBound
 from rpython.jit.metainterp.optimizeopt.optimizer import (Optimization, REMOVED,
-    CONST_0, CONST_1, INFO_NONNULL, INFO_NULL)
+    CONST_0, CONST_1)
+from rpython.jit.metainterp.optimizeopt.info import INFO_NONNULL, INFO_NULL
 from rpython.jit.metainterp.optimizeopt.util import _findall, make_dispatcher_method
 from rpython.jit.metainterp.resoperation import rop, ResOperation, opclasses,\
      OpHelpers
@@ -447,19 +448,20 @@
         self._optimize_nullness(op, op.getarg(0), False)
 
     def _optimize_oois_ooisnot(self, op, expect_isnot, instance):
-        value0 = self.getvalue(op.getarg(0))
-        value1 = self.getvalue(op.getarg(1))
-        if value0.is_virtual():
+        info0 = self.getptrinfo(op.getarg(0))
+        info1 = self.getptrinfo(op.getarg(1))
+        if info0 and info0.is_virtual():
+            xxx
             if value1.is_virtual():
                 intres = (value0 is value1) ^ expect_isnot
                 self.make_constant_int(op, intres)
             else:
                 self.make_constant_int(op, expect_isnot)
-        elif value1.is_virtual():
+        elif info1 and info1.is_virtual():
             self.make_constant_int(op, expect_isnot)
-        elif value1.is_null():
+        elif info1 and info1.is_null():
             self._optimize_nullness(op, op.getarg(0), expect_isnot)
-        elif value0.is_null():
+        elif info0 and info0.is_null():
             self._optimize_nullness(op, op.getarg(1), expect_isnot)
         elif value0 is value1:
             self.make_constant_int(op, not expect_isnot)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -699,8 +699,7 @@
         if opinfo is not None and opinfo.is_virtual():
             opinfo.setfield_virtual(op.getdescr(), op.getarg(1))
         else:
-            xxx
-            value.ensure_nonnull()
+            self.make_nonnull(op)
             self.emit_operation(op)
 
     def optimize_NEW_WITH_VTABLE(self, op):


More information about the pypy-commit mailing list