[pypy-commit] pypy result-in-resops: continue porting test_llgraph

fijal noreply at buildbot.pypy.org
Tue Aug 28 14:20:12 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r56902:09c187ceba4a
Date: 2012-08-28 14:19 +0200
http://bitbucket.org/pypy/pypy/changeset/09c187ceba4a/

Log:	continue porting test_llgraph

diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -787,17 +787,18 @@
     # ----------
     # delegating to the builtins do_xxx() (done automatically for simple cases)
 
-    def op_getarrayitem_gc(self, arraydescr, array, index):
-        if arraydescr.typeinfo == REF:
-            return do_getarrayitem_gc_ptr(array, index)
-        elif arraydescr.typeinfo == INT:
-            return do_getarrayitem_gc_int(array, index)
-        elif arraydescr.typeinfo == FLOAT:
-            return do_getarrayitem_gc_float(array, index)
-        else:
-            raise NotImplementedError
+    def op_getarrayitem_gc_i(self, arraydescr, array, index):
+        return do_getarrayitem_gc_int(array, index)
 
-    op_getarrayitem_gc_pure = op_getarrayitem_gc
+    def op_getarrayitem_gc_p(self, arraydescr, array, index):
+        return do_getarrayitem_gc_ptr(array, index)
+
+    def op_getarrayitem_gc_f(self, arraydescr, array, index):
+        return do_getarrayitem_gc_float(array, index)
+
+    op_getarrayitem_gc_pure_i = op_getarrayitem_gc_i
+    op_getarrayitem_gc_pure_f = op_getarrayitem_gc_f
+    op_getarrayitem_gc_pure_p = op_getarrayitem_gc_p
 
     def op_getarrayitem_raw(self, arraydescr, array, index):
         if arraydescr.typeinfo == REF:
@@ -887,15 +888,14 @@
         else:
             raise NotImplementedError
 
-    def op_getinteriorfield_gc(self, descr, array, index):
-        if descr.typeinfo == REF:
-            return do_getinteriorfield_gc_ptr(array, index, descr.ofs)
-        elif descr.typeinfo == INT:
-            return do_getinteriorfield_gc_int(array, index, descr.ofs)
-        elif descr.typeinfo == FLOAT:
-            return do_getinteriorfield_gc_float(array, index, descr.ofs)
-        else:
-            raise NotImplementedError
+    def op_getinteriorfield_gc_i(self, descr, array, index):
+        return do_getinteriorfield_gc_int(array, index, descr.ofs)
+
+    def op_getinteriorfield_gc_p(self, descr, array, index):
+        return do_getinteriorfield_gc_ptr(array, index, descr.ofs)
+
+    def op_getinteriorfield_gc_f(self, descr, array, index):
+        return do_getinteriorfield_gc_float(array, index, descr.ofs)
 
     def op_getinteriorfield_raw(self, descr, array, index):
         if descr.typeinfo == REF:
@@ -1426,8 +1426,10 @@
 # ____________________________________________________________
 
 
-def do_same_as(x):
+def do_same_as_i(x):
     return x
+do_same_as_p = do_same_as_i
+do_same_as_f = do_same_as_i
 
 def do_arraylen_gc(arraydescr, array):
     array = array._obj.container
diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -774,21 +774,21 @@
         #
         r = self.execute_operation(rop.ARRAYLEN_GC, [a_box],
                                    'int', descr=arraydescr)
-        assert r.value == 342
+        assert r == 342
         r = self.execute_operation(rop.SETARRAYITEM_GC, [a_box, BoxInt(310),
                                                          BoxInt(7441)],
                                    'void', descr=arraydescr)
         assert r is None
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(310)],
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(310)],
                                    'int', descr=arraydescr)
-        assert r.value == 7441
+        assert r == 7441
         #
         a_box, A = self.alloc_array_of(lltype.Char, 11)
         arraydescr = self.cpu.arraydescrof(A)
         assert not arraydescr.is_array_of_pointers()
         r = self.execute_operation(rop.ARRAYLEN_GC, [a_box],
                                    'int', descr=arraydescr)
-        assert r.value == 11
+        assert r == 11
         r = self.execute_operation(rop.SETARRAYITEM_GC, [a_box, BoxInt(4),
                                                          BoxInt(150)],
                                    'void', descr=arraydescr)
@@ -797,12 +797,12 @@
                                                          BoxInt(160)],
                                    'void', descr=arraydescr)
         assert r is None
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(4)],
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(4)],
                                    'int', descr=arraydescr)
-        assert r.value == 150
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(3)],
+        assert r == 150
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(3)],
                                    'int', descr=arraydescr)
-        assert r.value == 160
+        assert r == 160
 
         #
         if isinstance(A, lltype.GcArray):
@@ -812,14 +812,14 @@
         assert arraydescr.is_array_of_pointers()
         r = self.execute_operation(rop.ARRAYLEN_GC, [b_box],
                                    'int', descr=arraydescr)
-        assert r.value == 3
+        assert r == 3
         r = self.execute_operation(rop.SETARRAYITEM_GC, [b_box, BoxInt(1),
                                                          a_box],
                                    'void', descr=arraydescr)
         assert r is None
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [b_box, BoxInt(1)],
+        r = self.execute_operation(rop.GETARRAYITEM_GC_p, [b_box, BoxInt(1)],
                                    'ref', descr=arraydescr)
-        assert r.value == a_box.value
+        assert r == a_box.value
         #
         # Unsigned should work the same as Signed
         a_box, A = self.alloc_array_of(lltype.Unsigned, 342)
@@ -827,14 +827,14 @@
         assert not arraydescr.is_array_of_pointers()
         r = self.execute_operation(rop.ARRAYLEN_GC, [a_box],
                                    'int', descr=arraydescr)
-        assert r.value == 342
+        assert r == 342
         r = self.execute_operation(rop.SETARRAYITEM_GC, [a_box, BoxInt(310),
                                                          BoxInt(7441)],
                                    'void', descr=arraydescr)
         assert r is None
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(310)],
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(310)],
                                    'int', descr=arraydescr)
-        assert r.value == 7441
+        assert r == 7441
         #
         # Bool should work the same as Char
         a_box, A = self.alloc_array_of(lltype.Bool, 311)
@@ -842,7 +842,7 @@
         assert not arraydescr.is_array_of_pointers()
         r = self.execute_operation(rop.ARRAYLEN_GC, [a_box],
                                    'int', descr=arraydescr)
-        assert r.value == 311
+        assert r == 311
         r = self.execute_operation(rop.SETARRAYITEM_GC, [a_box, BoxInt(304),
                                                          BoxInt(1)],
                                    'void', descr=arraydescr)
@@ -855,15 +855,15 @@
                                                          BoxInt(1)],
                                    'void', descr=arraydescr)
         assert r is None
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(304)],
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(304)],
                                    'int', descr=arraydescr)
-        assert r.value == 1
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(303)],
+        assert r == 1
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(303)],
                                    'int', descr=arraydescr)
-        assert r.value == 0
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(302)],
+        assert r == 0
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(302)],
                                    'int', descr=arraydescr)
-        assert r.value == 1
+        assert r == 1
 
         if self.cpu.supports_floats:
             a_box, A = self.alloc_array_of(lltype.Float, 31)
@@ -874,12 +874,12 @@
             self.execute_operation(rop.SETARRAYITEM_GC, [a_box, BoxInt(2),
                                                          constfloat(4.5)],
                                    'void', descr=arraydescr)
-            r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(1)],
+            r = self.execute_operation(rop.GETARRAYITEM_GC_f, [a_box, BoxInt(1)],
                                        'float', descr=arraydescr)
-            assert r.getfloat() == 3.5
-            r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(2)],
+            assert r == 3.5
+            r = self.execute_operation(rop.GETARRAYITEM_GC_f, [a_box, BoxInt(2)],
                                        'float', descr=arraydescr)
-            assert r.getfloat() == 4.5
+            assert r == 4.5
 
         # For platforms where sizeof(INT) != sizeof(Signed) (ie, x86-64)
         a_box, A = self.alloc_array_of(rffi.INT, 342)
@@ -887,14 +887,14 @@
         assert not arraydescr.is_array_of_pointers()
         r = self.execute_operation(rop.ARRAYLEN_GC, [a_box],
                                    'int', descr=arraydescr)
-        assert r.value == 342
+        assert r == 342
         r = self.execute_operation(rop.SETARRAYITEM_GC, [a_box, BoxInt(310),
                                                          BoxInt(7441)],
                                    'void', descr=arraydescr)
         assert r is None
-        r = self.execute_operation(rop.GETARRAYITEM_GC, [a_box, BoxInt(310)],
+        r = self.execute_operation(rop.GETARRAYITEM_GC_i, [a_box, BoxInt(310)],
                                    'int', descr=arraydescr)
-        assert r.value == 7441
+        assert r == 7441
 
     def test_array_of_structs(self):
         TP = lltype.GcStruct('x')
@@ -919,9 +919,9 @@
         f = self.cpu.bh_getinteriorfield_gc_f(a_box.getref_base(), 3, kdescr)
         assert longlong.getrealfloat(f) == 1.5
         self.cpu.bh_setinteriorfield_gc_f(a_box.getref_base(), 3, kdescr, longlong.getfloatstorage(2.5))
-        r = self.execute_operation(rop.GETINTERIORFIELD_GC, [a_box, BoxInt(3)],
+        r = self.execute_operation(rop.GETINTERIORFIELD_GC_f, [a_box, BoxInt(3)],
                                    'float', descr=kdescr)
-        assert r.getfloat() == 2.5
+        assert r == 2.5
         #
         NUMBER_FIELDS = [('vs', lltype.Signed),
                          ('vu', lltype.Unsigned),
@@ -947,10 +947,10 @@
                                               vdescr, -25)
         for name, TYPE in NUMBER_FIELDS:
             vdescr = self.cpu.interiorfielddescrof(A, name)
-            r = self.execute_operation(rop.GETINTERIORFIELD_GC,
+            r = self.execute_operation(rop.GETINTERIORFIELD_GC_i,
                                        [a_box, BoxInt(3)],
                                        'int', descr=vdescr)
-            assert r.getint() == rffi.cast(lltype.Signed, rffi.cast(TYPE, -25))
+            assert r == rffi.cast(lltype.Signed, rffi.cast(TYPE, -25))
         #
         self.execute_operation(rop.SETINTERIORFIELD_GC, [a_box, BoxInt(4),
                                                          s_box],
@@ -959,23 +959,23 @@
         assert r == s_box.getref_base()
         self.cpu.bh_setinteriorfield_gc_r(a_box.getref_base(), 3, pdescr,
                                           s_box.getref_base())
-        r = self.execute_operation(rop.GETINTERIORFIELD_GC, [a_box, BoxInt(3)],
+        r = self.execute_operation(rop.GETINTERIORFIELD_GC_p, [a_box, BoxInt(3)],
                                    'ref', descr=pdescr)
-        assert r.getref_base() == s_box.getref_base()
+        assert r == s_box.getref_base()
 
     def test_string_basic(self):
         s_box = self.alloc_string("hello\xfe")
         r = self.execute_operation(rop.STRLEN, [s_box], 'int')
-        assert r.value == 6
+        assert r == 6
         r = self.execute_operation(rop.STRGETITEM, [s_box, BoxInt(5)], 'int')
-        assert r.value == 254
+        assert r == 254
         r = self.execute_operation(rop.STRSETITEM, [s_box, BoxInt(4),
                                                     BoxInt(153)], 'void')
         assert r is None
         r = self.execute_operation(rop.STRGETITEM, [s_box, BoxInt(5)], 'int')
-        assert r.value == 254
+        assert r == 254
         r = self.execute_operation(rop.STRGETITEM, [s_box, BoxInt(4)], 'int')
-        assert r.value == 153
+        assert r == 153
 
     def test_copystrcontent(self):
         s_box = self.alloc_string("abcdef")
@@ -1020,42 +1020,36 @@
     def test_unicode_basic(self):
         u_box = self.alloc_unicode(u"hello\u1234")
         r = self.execute_operation(rop.UNICODELEN, [u_box], 'int')
-        assert r.value == 6
+        assert r == 6
         r = self.execute_operation(rop.UNICODEGETITEM, [u_box, BoxInt(5)],
                                    'int')
-        assert r.value == 0x1234
+        assert r == 0x1234
         r = self.execute_operation(rop.UNICODESETITEM, [u_box, BoxInt(4),
                                                         BoxInt(31313)], 'void')
         assert r is None
         r = self.execute_operation(rop.UNICODEGETITEM, [u_box, BoxInt(5)],
                                    'int')
-        assert r.value == 0x1234
+        assert r == 0x1234
         r = self.execute_operation(rop.UNICODEGETITEM, [u_box, BoxInt(4)],
                                    'int')
-        assert r.value == 31313
+        assert r == 31313
 
     def test_same_as(self):
-        r = self.execute_operation(rop.SAME_AS, [ConstInt(5)], 'int')
-        assert r.value == 5
-        r = self.execute_operation(rop.SAME_AS, [BoxInt(5)], 'int')
-        assert r.value == 5
+        r = self.execute_operation(rop.SAME_AS_i, [ConstInt(5)], 'int')
+        assert r == 5
+        r = self.execute_operation(rop.SAME_AS_i, [BoxInt(5)], 'int')
+        assert r == 5
         u_box = self.alloc_unicode(u"hello\u1234")
-        r = self.execute_operation(rop.SAME_AS, [u_box.constbox()], 'ref')
-        assert r.value == u_box.value
-        r = self.execute_operation(rop.SAME_AS, [u_box], 'ref')
-        assert r.value == u_box.value
+        r = self.execute_operation(rop.SAME_AS_p, [u_box.constbox()], 'ref')
+        assert r == u_box.value
+        r = self.execute_operation(rop.SAME_AS_p, [u_box], 'ref')
+        assert r == u_box.value
 
         if self.cpu.supports_floats:
-            r = self.execute_operation(rop.SAME_AS, [constfloat(5.5)], 'float')
-            assert r.getfloat() == 5.5
-            r = self.execute_operation(rop.SAME_AS, [boxfloat(5.5)], 'float')
-            assert r.getfloat() == 5.5
-
-    def test_virtual_ref(self):
-        pass   # VIRTUAL_REF must not reach the backend nowadays
-
-    def test_virtual_ref_finish(self):
-        pass   # VIRTUAL_REF_FINISH must not reach the backend nowadays
+            r = self.execute_operation(rop.SAME_AS_f, [constfloat(5.5)], 'float')
+            assert r == 5.5
+            r = self.execute_operation(rop.SAME_AS_f, [boxfloat(5.5)], 'float')
+            assert r == 5.5
 
     def test_arguments_to_execute_token(self):
         # this test checks that execute_token() can be called with any
@@ -1092,28 +1086,26 @@
             random.shuffle(ks)
             for k in ks:
                 if isinstance(inputargs[k], BoxInt):
-                    newbox = BoxInt()
                     x = r.randrange(-100000, 100000)
                     operations.append(
-                        ResOperation(rop.INT_ADD, [inputargs[k],
-                                                   ConstInt(x)], newbox)
+                        create_resop_2(rop.INT_ADD, 0, inputargs[k],
+                                       ConstInt(x))
                         )
                     y = values[k] + x
                 else:
-                    newbox = BoxFloat()
                     x = r.random()
                     operations.append(
-                        ResOperation(rop.FLOAT_ADD, [inputargs[k],
-                                                     constfloat(x)], newbox)
+                        create_resop_2(rop.FLOAT_ADD, 0.0, inputargs[k],
+                                       constfloat(x))
                         )
                     y = longlong.getrealfloat(values[k]) + x
                     y = longlong.getfloatstorage(y)
                 kk = r.randrange(0, len(retboxes)+1)
-                retboxes.insert(kk, newbox)
+                retboxes.insert(kk, operations[-1])
                 retvalues.insert(kk, y)
             #
             operations.append(
-                ResOperation(rop.FINISH, retboxes, None, descr=faildescr)
+                create_resop(rop.FINISH, None, retboxes, descr=faildescr)
                 )
             print inputargs
             for op in operations:
@@ -1124,7 +1116,7 @@
             assert fail.identifier == 42
             #
             for k in range(len(retvalues)):
-                if isinstance(retboxes[k], BoxInt):
+                if retboxes[k].type == 'i':
                     got = self.cpu.get_latest_value_int(k)
                 else:
                     got = self.cpu.get_latest_value_float(k)
@@ -1148,11 +1140,11 @@
             for k in range(nb_args):
                 kind = r.randrange(0, numkinds)
                 if kind == 0:
-                    inputargs.append(BoxInt())
+                    inputargs.append("i%d" % (k + 10))
                 elif kind == 1:
-                    inputargs.append(BoxPtr())
+                    inputargs.append("p%d" % k)
                 else:
-                    inputargs.append(BoxFloat())
+                    inputargs.append("f%d" % k)
             jumpargs = []
             remixing = []
             for srcbox in inputargs:
@@ -1165,24 +1157,19 @@
                 jumpargs.append(otherbox)
             #
             index_counter = r.randrange(0, len(inputargs)+1)
-            i0 = BoxInt()
-            i1 = BoxInt()
-            i2 = BoxInt()
-            inputargs.insert(index_counter, i0)
-            jumpargs.insert(index_counter, i1)
-            #
-            looptoken = JitCellToken()
-            targettoken = TargetToken()
-            faildescr = BasicFailDescr(15)
-            operations = [
-                ResOperation(rop.LABEL, inputargs, None, descr=targettoken),
-                ResOperation(rop.INT_SUB, [i0, ConstInt(1)], i1),
-                ResOperation(rop.INT_GE, [i1, ConstInt(0)], i2),
-                ResOperation(rop.GUARD_TRUE, [i2], None),
-                ResOperation(rop.JUMP, jumpargs, None, descr=targettoken),
-                ]
-            operations[3].setfailargs(inputargs[:])
-            operations[3].setdescr(faildescr)
+            inputargs.insert(index_counter, "i0")
+            jumpargs.insert(index_counter, "i1")
+            inp = ", ".join(inputargs)
+            import pdb
+            pdb.set_trace()
+            inputargs, operations, looptoken = self.parse("""
+            [%s]
+            label(%s)
+            i1 = int_sub(i1, 1)
+            i2 = int_ge(i1, 0)
+            guard_true(i2, descr=faildescr) [%s]
+            jump(%s, descr=targettoken)
+            """ % (inp, inp, inp, ", ".join(jumpargs)))
             #
             self.cpu.compile_loop(inputargs, operations, looptoken)
             #
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
@@ -25,8 +25,7 @@
     elif cls.NUMARGS == 2:
         return create_resop_2(opnum, result, args[0], args[1], descr)
     elif cls.NUMARGS == 3:
-        return create_resop_1(opnum, result, args[0], args[1], args[2],
-                              args[3], descr)
+        return create_resop_3(opnum, result, args[0], args[1], args[2], descr)
     else:
         return create_resop(opnum, result, args, descr)
 
@@ -67,7 +66,8 @@
 def create_resop_1(opnum, result, arg0, descr=None):
     cls = opclasses[opnum]
     assert cls.NUMARGS == 1
-    if cls.is_always_pure():
+    if (cls.is_always_pure() and
+        opnum not in (rop.SAME_AS_i, rop.SAME_AS_f, rop.SAME_AS_p)):
         if arg0.is_constant():
             return cls.wrap_constant(result)
     if result is None:


More information about the pypy-commit mailing list