[pypy-commit] pypy result-in-resops: rename mutable_copy to make_forwarded_copy. fix tests
fijal
noreply at buildbot.pypy.org
Mon Oct 22 19:12:52 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r58371:b336bf42d0c9
Date: 2012-10-22 19:12 +0200
http://bitbucket.org/pypy/pypy/changeset/b336bf42d0c9/
Log: rename mutable_copy to make_forwarded_copy. fix tests
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -280,19 +280,13 @@
assert self.level == LEVEL_CONSTANT
return '<OptConst %r>' % self.op
-class ConstantValue(OptValue):
- def __init__(self, box):
- self.make_constant(box)
-
- def __repr__(self):
- return 'Constant(%r)' % (self.op,)
-
CONST_0 = ConstInt(0)
CONST_1 = ConstInt(1)
-CVAL_ZERO = ConstantValue(CONST_0)
-CVAL_ZERO_FLOAT = ConstantValue(ConstFloat(longlong.getfloatstorage(0.0)))
-CVAL_NULLREF = ConstantValue(llhelper.CONST_NULL)
-llhelper.CVAL_NULLREF = CVAL_NULLREF
+#CVAL_ZERO = ConstantValue(CONST_0)
+#CVAL_ZERO_FLOAT = ConstantValue(ConstFloat(longlong.getfloatstorage(0.0)))
+#CVAL_NULLREF = ConstantValue(llhelper.CONST_NULL)
+CONST_NULL = llhelper.CONST_NULL
+#llhelper.CVAL_NULLREF = CVAL_NULLREF
REMOVED = AbstractResOp()
@@ -447,34 +441,25 @@
self.metainterp_sd.profiler.count(jitprof.Counters.OPT_FORCINGS)
self.resumedata_memo.forget_numberings(virtualbox)
- def getvalue(self, box, create=True):
- try:
- while True:
- box = box.get_extra("optimize_replace")
- except KeyError:
- pass
+ def getvalue(self, box):
if box.is_constant():
if box.type == REF:
if not box.getref_base():
- return CVAL_NULLREF
+ return CONST_NULL
try:
return self.interned_refs[box.getref_base()]
except KeyError:
- val = ConstantValue(box)
- self.interned_refs[box.getref_base()] = val
- return val
- return ConstantValue(box)
- try:
- value = box.get_extra("optimize_value")
- except KeyError:
- if not create:
- return None
- value = OptValue(box)
- box.set_extra("optimize_value", value)
- self.ensure_imported(value)
+ self.interned_refs[box.getref_base()] = box
+ return box
+ return box
+ value = box._forwarded
+ if value is None:
+ value = box.make_forwarded_copy()
+ #self.ensure_imported(value)
return value
def setvalue(self, box, value):
+ xxx
assert not box.is_constant()
assert not box.has_extra("optimize_value")
box.set_extra("optimize_value", value)
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -867,7 +867,7 @@
pass
@specialize.arg(1)
- def mutable_copy(self, newopnum=-1, descr=None):
+ def make_forwarded_copy(self, newopnum=-1, descr=None):
if newopnum == -1:
newopnum = self.getopnum()
res = create_resop_0(newopnum, self.getresult(),
@@ -875,6 +875,9 @@
if self.is_guard():
res.set_rd_frame_info_list(self.get_rd_frame_info_list())
res.set_rd_snapshot(self.get_rd_snapshot())
+ assert not self.is_mutable
+ assert not self._forwarded
+ self._forwarded = res
return res
def get_key_op(self, opt):
@@ -917,7 +920,7 @@
return res
@specialize.arg(1)
- def mutable_copy(self, newopnum=-1, arg0=None, descr=None):
+ def make_forwarded_copy(self, newopnum=-1, arg0=None, descr=None):
if newopnum == -1:
newopnum = self.getopnum()
res = create_resop_1(newopnum, self.getresult(), arg0 or self._arg0,
@@ -925,6 +928,9 @@
if self.is_guard():
res.set_rd_frame_info_list(self.get_rd_frame_info_list())
res.set_rd_snapshot(self.get_rd_snapshot())
+ assert not self.is_mutable
+ assert not self._forwarded
+ self._forwarded = res
return res
def get_arg_hash(self):
@@ -970,7 +976,7 @@
new_arg0, new_arg1, self.getdescr())
@specialize.arg(1)
- def mutable_copy(self, newopnum=-1, arg0=None, arg1=None, descr=None):
+ def make_forwarded_copy(self, newopnum=-1, arg0=None, arg1=None, descr=None):
if newopnum == -1:
newopnum = self.getopnum()
res = create_resop_2(newopnum, self.getresult(), arg0 or self._arg0,
@@ -980,6 +986,9 @@
if self.is_guard():
res.set_rd_frame_info_list(self.get_rd_frame_info_list())
res.set_rd_snapshot(self.get_rd_snapshot())
+ assert not self._forwarded
+ assert not self.is_mutable
+ self._forwarded = res
return res
def get_arg_hash(self):
@@ -1032,7 +1041,7 @@
new_arg0, new_arg1, new_arg2, self.getdescr())
@specialize.arg(1)
- def mutable_copy(self, newopnum=-1, arg0=None, arg1=None, arg2=None,
+ def make_forwarded_copy(self, newopnum=-1, arg0=None, arg1=None, arg2=None,
descr=None):
if newopnum == -1:
newopnum = self.getopnum()
@@ -1040,6 +1049,9 @@
arg1 or self._arg1, arg2 or self._arg2,
descr or self.getdescr(), mutable=True)
assert not r.is_guard()
+ assert not self._forwarded
+ assert not self.is_mutable
+ self._forwarded = r
return r
def get_arg_hash(self):
@@ -1091,13 +1103,16 @@
newargs, self.getdescr())
@specialize.arg(1)
- def mutable_copy(self, newopnum=-1, newargs=None, descr=None):
+ def make_forwarded_copy(self, newopnum=-1, newargs=None, descr=None):
if newopnum == -1:
newopnum = self.getopnum()
r = create_resop(newopnum, self.getresult(),
newargs or self.getarglist(),
descr or self.getdescr(), mutable=True)
assert not r.is_guard()
+ assert not self._forwarded
+ assert not self.is_mutable
+ self._forwarded = r
return r
def get_arg_hash(self):
diff --git a/pypy/jit/metainterp/test/test_optmodel.py b/pypy/jit/metainterp/test/test_optmodel.py
--- a/pypy/jit/metainterp/test/test_optmodel.py
+++ b/pypy/jit/metainterp/test/test_optmodel.py
@@ -6,40 +6,44 @@
from pypy.jit.metainterp import resoperation as rop
from pypy.jit.metainterp import optmodel
-def test_mutable_copy():
+def test_make_forwarded_copy():
op = rop.create_resop_1(rop.rop.INT_IS_ZERO, 1, FakeBox('a'))
assert not op.is_mutable
- op2 = op.mutable_copy(rop.rop.INT_IS_TRUE)
+ op2 = op.make_forwarded_copy(rop.rop.INT_IS_TRUE)
assert op2.opnum == rop.rop.INT_IS_TRUE
assert op2.getarg(0) == FakeBox('a')
- op2 = op.mutable_copy(rop.rop.INT_IS_TRUE, FakeBox('b'))
+ op._forwarded = None
+ op2 = op.make_forwarded_copy(rop.rop.INT_IS_TRUE, FakeBox('b'))
assert op2.is_mutable
assert op2.opnum == rop.rop.INT_IS_TRUE
assert op2.getarg(0) == FakeBox('b')
assert op2 is not op
op = rop.create_resop_2(rop.rop.INT_ADD, 3, FakeBox("a"), FakeBox("b"))
- op2 = op.mutable_copy(rop.rop.INT_SUB)
+ op2 = op.make_forwarded_copy(rop.rop.INT_SUB)
assert op2.opnum == rop.rop.INT_SUB
assert op2.getarglist() == [FakeBox("a"), FakeBox("b")]
- op2 = op.mutable_copy(rop.rop.INT_SUB, None, FakeBox("c"))
+ op._forwarded = None
+ op2 = op.make_forwarded_copy(rop.rop.INT_SUB, None, FakeBox("c"))
assert op2.opnum == rop.rop.INT_SUB
assert op2.getarglist() == [FakeBox("a"), FakeBox("c")]
op = rop.create_resop_3(rop.rop.STRSETITEM, None, FakeBox('a'),
FakeBox('b'), FakeBox('c'))
- op2 = op.mutable_copy(rop.rop.UNICODESETITEM, None, FakeBox("c"))
+ op2 = op.make_forwarded_copy(rop.rop.UNICODESETITEM, None, FakeBox("c"))
assert op2.opnum == rop.rop.UNICODESETITEM
assert op2.getarglist() == [FakeBox("a"), FakeBox("c"), FakeBox("c")]
mydescr = FakeDescr()
op = rop.create_resop(rop.rop.CALL_PURE_i, 13, [FakeBox('a'), FakeBox('b'),
FakeBox('c')], descr=mydescr)
- op2 = op.mutable_copy(rop.rop.CALL_i)
+ op2 = op.make_forwarded_copy(rop.rop.CALL_i)
assert op2.getarglist() == ['a', 'b', 'c']
- op2 = op.mutable_copy(rop.rop.CALL_i, [FakeBox('a')])
+ op._forwarded = None
+ op2 = op.make_forwarded_copy(rop.rop.CALL_i, [FakeBox('a')])
assert op2.getarglist() == ['a']
def test_failargs():
op = rop.create_resop_0(rop.rop.GUARD_NO_OVERFLOW, None)
assert not hasattr(op, 'set_failargs')
- op2 = op.mutable_copy()
- op2.set_failargs([1, 2, 3])
- assert op2.get_failargs() == [1, 2, 3]
+ op2 = op.make_forwarded_copy()
+ assert op._forwarded is op2
+ op2.setfailargs([1, 2, 3])
+ assert op2.getfailargs() == [1, 2, 3]
More information about the pypy-commit
mailing list