[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