[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