Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r74937:5f24f3b47ef4
Date: 2014-12-14 21:38 +0200
http://bitbucket.org/pypy/pypy/changeset/5f24f3b47ef4/

Log:    Start porting the tests bit by bit, 10% of optimizeopt passes

diff --git a/rpython/jit/metainterp/history.py 
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -94,15 +94,9 @@
         raise NotImplementedError
     getref._annspecialcase_ = 'specialize:arg(1)'
 
-    def clonebox(self):
-        raise NotImplementedError
-
     def constbox(self):
         raise NotImplementedError
 
-    def nonconstbox(self):
-        raise NotImplementedError
-
     def getaddr(self):
         "Only for raw addresses (BoxInt & ConstInt), not for GC addresses"
         raise NotImplementedError
@@ -235,11 +229,6 @@
                 assert isinstance(value, Symbolic)
         self.value = value
 
-    def clonebox(self):
-        return BoxInt(self.value)
-
-    nonconstbox = clonebox
-
     def getint(self):
         return self.value
 
@@ -277,11 +266,6 @@
         assert lltype.typeOf(valuestorage) is longlong.FLOATSTORAGE
         self.value = valuestorage
 
-    def clonebox(self):
-        return BoxFloat(self.value)
-
-    nonconstbox = clonebox
-
     def getfloatstorage(self):
         return self.value
 
@@ -324,11 +308,6 @@
         assert lltype.typeOf(value) == llmemory.GCREF
         self.value = value
 
-    def clonebox(self):
-        return BoxPtr(self.value)
-
-    nonconstbox = clonebox
-
     def getref_base(self):
         return self.value
 
@@ -435,9 +414,6 @@
     def forget_value(self):
         self.value = 0
 
-    def clonebox(self):
-        return BoxInt(self.value)
-
     def constbox(self):
         return ConstInt(self.value)
 
@@ -471,9 +447,6 @@
     def forget_value(self):
         self.value = longlong.ZEROF
 
-    def clonebox(self):
-        return BoxFloat(self.value)
-
     def constbox(self):
         return ConstFloat(self.value)
 
@@ -504,9 +477,6 @@
     def forget_value(self):
         self.value = lltype.nullptr(llmemory.GCREF.TO)
 
-    def clonebox(self):
-        return BoxPtr(self.value)
-
     def constbox(self):
         return ConstPtr(self.value)
 
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py 
b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -145,12 +145,12 @@
             if structvalue in self._cached_fields:
                 if op.getopnum() == rop.SETFIELD_GC:
                     result = op.getarg(1)
+                    opnum = OpHelpers.getfield_for_descr(op.getdescr())
+                    getop = ResOperation(opnum, [op.getarg(0)],
+                                         op.getdescr())
+                    getop.is_source_op = True
                     if isinstance(result, Const):
-                        newresult = result.clonebox()
-                        optimizer.make_constant(newresult, result)
-                        result = newresult
-                    getop = ResOperation(rop.GETFIELD_GC, [op.getarg(0)],
-                                         result, op.getdescr())
+                        optimizer.make_constant(getop, result)
                     shortboxes.add_potential(getop, synthetic=True)
                 if op.getopnum() == rop.SETARRAYITEM_GC:
                     result = op.getarg(2)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -543,14 +543,14 @@
     def test_ooisnull_on_null_ptr_1(self):
         ops = """
         []
-        p0 = escape()
+        p0 = escape_r()
         guard_isnull(p0) []
         guard_isnull(p0) []
         jump()
         """
         expected = """
         []
-        p0 = escape()
+        p0 = escape_r()
         guard_isnull(p0) []
         jump()
         """
@@ -562,7 +562,7 @@
         pv = new_with_vtable(ConstClass(node_vtable))
         setfield_gc(pv, p0, descr=valuedescr)
         guard_nonnull(p0) []
-        p1 = getfield_gc(pv, descr=valuedescr)
+        p1 = getfield_gc_r(pv, descr=valuedescr)
         guard_nonnull(p1) []
         jump(p0)
         """
@@ -641,13 +641,13 @@
         i3 = ptr_eq(NULL, p0)
         guard_false(i3) []
         guard_nonnull(p0) []
-        escape(p0)
+        escape_r(p0)
         jump()
         """
         expected = """
         []
         p0 = new_array(5, descr=arraydescr)
-        escape(p0)
+        escape_r(p0)
         jump()
         """
         self.optimize_loop(ops, expected)
@@ -668,7 +668,7 @@
     def test_constptr_guard_value(self):
         ops = """
         []
-        p1 = escape()
+        p1 = escape_r()
         guard_value(p1, ConstPtr(myptr)) []
         jump()
         """
@@ -755,7 +755,7 @@
     def test_compare_with_itself(self):
         ops = """
         []
-        i0 = escape()
+        i0 = escape_i()
         i1 = int_lt(i0, i0)
         guard_false(i1) []
         i2 = int_le(i0, i0)
@@ -772,7 +772,7 @@
         """
         expected = """
         []
-        i0 = escape()
+        i0 = escape_i()
         jump()
         """
         self.optimize_loop(ops, expected)
@@ -802,22 +802,22 @@
     def test_p123_simple(self):
         ops = """
         [i1, p2, p3]
-        i3 = getfield_gc(p3, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p3, descr=valuedescr)
+        escape_n(i3)
         p1 = new_with_vtable(ConstClass(node_vtable))
         setfield_gc(p1, i1, descr=valuedescr)
         jump(i1, p1, p2)
         """
         preamble = """
         [i1, p2, p3]
-        i3 = getfield_gc(p3, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p3, descr=valuedescr)
+        escape_n(i3)
         jump(i1, p2)
         """
         expected = """
         [i1, p2]
-        i3 = getfield_gc(p2, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p2, descr=valuedescr)
+        escape_n(i3)
         p3 = new_with_vtable(ConstClass(node_vtable))
         setfield_gc(p3, i1, descr=valuedescr)
         jump(i1, p3)
@@ -828,8 +828,8 @@
     def test_p123_nested(self):
         ops = """
         [i1, p2, p3]
-        i3 = getfield_gc(p3, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p3, descr=valuedescr)
+        escape_n(i3)
         p1 = new_with_vtable(ConstClass(node_vtable))
         setfield_gc(p1, i1, descr=valuedescr)
         p1sub = new_with_vtable(ConstClass(node_vtable2))
@@ -841,14 +841,14 @@
         # virtual.
         preamble = """
         [i1, p2, p3]
-        i3 = getfield_gc(p3, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p3, descr=valuedescr)
+        escape_n(i3)
         jump(i1, p2)
         """
         expected = """
         [i1, p2]
-        i3 = getfield_gc(p2, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p2, descr=valuedescr)
+        escape_n(i3)
         p4 = new_with_vtable(ConstClass(node_vtable))
         p1sub = new_with_vtable(ConstClass(node_vtable2))
         setfield_gc(p1sub, i1, descr=valuedescr)
@@ -861,9 +861,9 @@
     def test_p123_anti_nested(self):
         ops = """
         [i1, p2, p3]
-        p3sub = getfield_gc(p3, descr=nextdescr)
-        i3 = getfield_gc(p3sub, descr=valuedescr)
-        escape(i3)
+        p3sub = getfield_gc_r(p3, descr=nextdescr)
+        i3 = getfield_gc_i(p3sub, descr=valuedescr)
+        escape_n(i3)
         p1 = new_with_vtable(ConstClass(node_vtable))
         p2sub = new_with_vtable(ConstClass(node_vtable2))
         setfield_gc(p2sub, i1, descr=valuedescr)
@@ -874,9 +874,9 @@
         # a "young" virtual p2sub.  Make sure it is all forced.
         preamble = """
         [i1, p2, p3]
-        p3sub = getfield_gc(p3, descr=nextdescr)
-        i3 = getfield_gc(p3sub, descr=valuedescr)
-        escape(i3)
+        p3sub = getfield_gc_r(p3, descr=nextdescr)
+        i3 = getfield_gc_i(p3sub, descr=valuedescr)
+        escape_n(i3)
         p2sub = new_with_vtable(ConstClass(node_vtable2))
         setfield_gc(p2sub, i1, descr=valuedescr)
         setfield_gc(p2, p2sub, descr=nextdescr)
@@ -884,8 +884,8 @@
         """
         expected = """
         [i1, p2, p2sub]
-        i3 = getfield_gc(p2sub, descr=valuedescr)
-        escape(i3)
+        i3 = getfield_gc_i(p2sub, descr=valuedescr)
+        escape_n(i3)
         p1 = new_with_vtable(ConstClass(node_vtable))
         p3sub = new_with_vtable(ConstClass(node_vtable2))
         setfield_gc(p3sub, i1, descr=valuedescr)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py 
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -385,7 +385,7 @@
         assert len(optimized.inputargs) == len(expected.inputargs)
         remap = {}
         for box1, box2 in zip(optimized.inputargs, expected.inputargs):
-            assert box1.__class__ == box2.__class__
+            assert box1.type == box2.type
             remap[box2] = box1
         assert equaloplists(optimized.operations,
                             expected.operations, False, remap, text_right)
@@ -419,7 +419,7 @@
 
         jump_args = jumpop.getarglist()[:]
         operations = operations[:-1]
-        memo = compile.Memo()
+        memo = compile.Memo(inputargs, jump_args)
         cloned_operations = [op.clone(memo) for op in operations]
         for op in cloned_operations:
             op.is_source_op = True
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -280,7 +280,7 @@
 
         # We dont need to inline the short preamble we are creating as we are 
conneting
         # the bridge to a different trace with a different short preamble
-        self.short_inliner = None
+        self.memo = None
 
         newoperations = self.optimizer.get_newoperations()
         self.boxes_created_this_iteration = {}
@@ -384,13 +384,14 @@
         assert isinstance(target_token, TargetToken)
 
         # Turn guards into conditional jumps to the preamble
-        for i in range(len(short)):
-            op = short[i]
-            if op.is_guard():
-                #op = op.clone() XXXX
-                op.setfailargs(None)
-                op.setdescr(None) # will be set to a proper descr when the 
preamble is used
-                short[i] = op
+        #for i in range(len(short)):
+        #    op = short[i]
+        #    if op.is_guard():
+                #op = op.clone(self.memo)
+                #op.is_source_op = True
+        #        op.setfailargs(None)
+        #        op.setdescr(None) # will be set to a proper descr when the 
preamble is used
+        #        short[i] = op
 
         # Clone ops and boxes to get private versions and
         short_inputargs = short[0].getarglist()
@@ -408,7 +409,10 @@
         for i in range(len(short)):
             op = short[i]
             newop = op.clone(memo)
-            if op.type != 'v' and op in self.short_boxes.assumed_classes:
+            if newop.is_guard():
+                newop.setfailargs(None)
+                newop.setdescr(None)
+            if op in self.short_boxes.assumed_classes:
                 target_token.assumed_classes[newop] = 
self.short_boxes.assumed_classes[op]
             short[i] = newop
 
@@ -443,8 +447,8 @@
         if op is None:
             return None
         if op is not None and op in self.short_seen:
-            if emit and self.short_inliner:
-                return self.short_inliner.inline_arg(op.result)
+            if emit and self.memo:
+                return self.memo.get(op, op)
             else:
                 return None
 
@@ -487,7 +491,7 @@
         short_op = self.short_boxes.producer(box)
         newresult = self.add_op_to_short(short_op)
 
-        short_jumpargs.append(short_op.result)
+        short_jumpargs.append(short_op)
         inputargs.append(box)
         box = newresult
         if box in self.optimizer.values:
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -161,7 +161,12 @@
                                              ['descr=%r' % descr]))
 
     def repr_short(self, memo):
-        return memo[self]
+        try:
+            return memo[self]
+        except KeyError:
+            name = self.type + str(len(memo))
+            memo[self] = name
+            return name
 
     def getopname(self):
         try:
@@ -327,6 +332,9 @@
     def nonnull(self):
         return self._resint != 0
 
+    def clone_input_arg(self):
+        return InputArgInt()
+
 class FloatOp(object):
     _mixin_ = True
 
@@ -349,6 +357,9 @@
     def nonnull(self):
         return bool(longlong.extract_bits(self._resfloat))
 
+    def clone_input_arg(self):
+        return InputArgFloat()
+
 class RefOp(object):
     _mixin_ = True
 
@@ -373,6 +384,9 @@
     def nonnull(self):
         return bool(self._resref)
 
+    def clone_input_arg(self):
+        return InputArgRef()
+
 class AbstractInputArg(AbstractValue):
     is_source_op = True
     source_op = None
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to