[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