[pypy-commit] pypy optresult: pass the first test about ptr

fijal noreply at buildbot.pypy.org
Tue Feb 24 18:08:19 CET 2015


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

Log:	pass the first test about ptr

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
@@ -1,7 +1,7 @@
 from rpython.jit.metainterp import jitprof, resume, compile
 from rpython.jit.metainterp.executor import execute_nonspec_const
 from rpython.jit.metainterp.logger import LogOperations
-from rpython.jit.metainterp.history import Const, ConstInt, REF
+from rpython.jit.metainterp.history import Const, ConstInt, REF, ConstPtr
 from rpython.jit.metainterp.optimizeopt.intutils import IntBound,\
      IntLowerBound, MININT, MAXINT, IntUnbounded, ConstIntBound
 from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
@@ -205,10 +205,16 @@
     last_guard_pos = -1
     lenbound = None
 
-    def __init__(self, box, level=None, known_class=None, intbound=None):
-        OptValue.__init__(self, box, level, None, intbound)
-        if not isinstance(box, Const):
-            self.known_class = known_class
+    #def __init__(self, level=None, known_class=None, intbound=None):
+    #    OptValue.__init__(self, box, level, None, intbound)
+    #    if not isinstance(box, Const):
+    #        self.known_class = known_class
+
+    def getlevel(self):
+        return self._tag & 0x3
+
+    def setlevel(self, level):
+        self._tag = (self._tag & (~0x3)) | level
 
     def __repr__(self):
         level = {LEVEL_UNKNOWN: 'UNKNOWN',
@@ -412,12 +418,13 @@
 
     def getintbound(self, op):#, create=True):
         assert op.type == 'i'
-        while op.get_forwarded() is not None:
-            op = op.get_forwarded()
-        if isinstance(op, IntBound):
-            return op
+        op = self.get_box_replacement(op)
         if isinstance(op, ConstInt):
             return ConstIntBound(op.getint())
+        fw = op.get_forwarded()
+        if isinstance(fw, IntBound):
+            return fw
+        assert fw is None
         assert op.type == 'i'
         intbound = IntUnbounded()
         op.set_forwarded(intbound)
@@ -428,6 +435,20 @@
             return self.getintbound(op).getnullness()
         xxxx
 
+    def getptrinfo(self, op):
+        assert op.type == 'r'
+        op = self.get_box_replacement(op)
+        assert op.type == 'r'
+        if isinstance(op, ConstPtr):
+            xxx
+        fw = op.get_forwarded()
+        if fw is not None:
+            assert isinstance(fw, PtrOptInfo)
+            return fw
+        ptrinfo = PtrOptInfo()
+        op.set_forwarded(ptrinfo)
+        return ptrinfo
+
     def get_box_replacement(self, op):
         return self.optimizer.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
@@ -346,7 +346,7 @@
         value.make_constant_class(None, expectedclassbox)
 
     def optimize_GUARD_CLASS(self, op):
-        value = self.getvalue(op.getarg(0))
+        value = self.getptrinfo(op.getarg(0))
         expectedclassbox = op.getarg(1)
         assert isinstance(expectedclassbox, Const)
         realclassbox = value.get_constant_class(self.optimizer.cpu)
@@ -356,7 +356,6 @@
             r = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(op)
             raise InvalidLoop('A GUARD_CLASS (%s) was proven to always fail'
                               % r)
-        assert isinstance(value, PtrOptValue)
         old_guard_op = value.get_last_guard(self.optimizer)
         if old_guard_op and not isinstance(old_guard_op.getdescr(),
                                            compile.ResumeAtPositionDescr):


More information about the pypy-commit mailing list