[pypy-svn] r37629 - in pypy/dist/pypy/jit/codegen: demo ppc test

mwh at codespeak.net mwh at codespeak.net
Tue Jan 30 18:23:31 CET 2007


Author: mwh
Date: Tue Jan 30 18:23:29 2007
New Revision: 37629

Modified:
   pypy/dist/pypy/jit/codegen/demo/rerun_failures.py
   pypy/dist/pypy/jit/codegen/ppc/rgenop.py
   pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
rename all variables in enter_next_block.
makes a test case that failed pass, but i'm a bit worried that it's only by
chance.


Modified: pypy/dist/pypy/jit/codegen/demo/rerun_failures.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/demo/rerun_failures.py	(original)
+++ pypy/dist/pypy/jit/codegen/demo/rerun_failures.py	Tue Jan 30 18:23:29 2007
@@ -26,3 +26,4 @@
 
 def test_39263():      rerun(39263)
 def test_33851():      rerun(33851)
+def test_20202():      rerun(20202)

Modified: pypy/dist/pypy/jit/codegen/ppc/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/rgenop.py	(original)
+++ pypy/dist/pypy/jit/codegen/ppc/rgenop.py	Tue Jan 30 18:23:29 2007
@@ -354,19 +354,22 @@
 ##     def genop_debug_pdb(self):    # may take an args_gv later
 
     def enter_next_block(self, kinds, args_gv):
+        if DEBUG_PRINT:
+            print 'enter_next_block1', args_gv
         seen = {}
         for i in range(len(args_gv)):
             gv = args_gv[i]
             if isinstance(gv, Var):
-                if gv in seen:
-                    new_gv = self._arg_op(gv, _PPC.mr)
-                    args_gv[i] = new_gv
-                seen[gv] = True
+                new_gv = self._arg_op(gv, _PPC.mr)
+                args_gv[i] = new_gv
             else:
                 new_gv = Var()
                 gv.load(self.insns, new_gv)
                 args_gv[i] = new_gv
 
+        if DEBUG_PRINT:
+            print 'enter_next_block2', args_gv
+
         r = Label(args_gv)
         self.insns.append(insn.Label(r))
         return r

Modified: pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/test/rgenop_tests.py	(original)
+++ pypy/dist/pypy/jit/codegen/test/rgenop_tests.py	Tue Jan 30 18:23:29 2007
@@ -12,6 +12,7 @@
 FUNC  = lltype.FuncType([lltype.Signed], lltype.Signed)
 FUNC2 = lltype.FuncType([lltype.Signed]*2, lltype.Signed)
 FUNC3 = lltype.FuncType([lltype.Signed]*3, lltype.Signed)
+FUNC5 = lltype.FuncType([lltype.Signed]*5, lltype.Signed)
 
 def make_adder(rgenop, n):
     # 'return x+n'
@@ -1494,3 +1495,84 @@
 
         res = fnptr(2, -89, -99)
         assert res == 0
+
+    def test_from_random_3_direct(self):
+
+        # def dummyfn(counter, g, l, w, x):
+        #   b = y = 0
+        #   if not counter: return 0
+        #
+        #   while counter:
+        #     y = not l
+        #     b = w and g
+        #     g = y and w
+        #     counter -= 1
+        #
+        #   return intmask(b+g+2*y)
+
+        rgenop = self.RGenOp()
+        signed_kind = rgenop.kindToken(lltype.Signed)
+        bool_kind = rgenop.kindToken(lltype.Bool)
+
+        builder0, gv_callable, [v0, v1, v2, v3, v4] = rgenop.newgraph(rgenop.sigToken(FUNC5), 'compiled_dummyfn')
+        builder0.start_writing()
+        v5 = builder0.genop1('int_is_true', v0)
+        builder1 = builder0.jump_if_true(v5, [v0, v1, v3, v2])
+        builder0.finish_and_return(rgenop.sigToken(FUNC5), rgenop.genconst(0))
+
+        builder1.start_writing()
+
+        args_gv = [v0, v1, v2, v3]
+        label0 = builder1.enter_next_block([signed_kind, signed_kind, signed_kind, signed_kind], args_gv)
+        [v6, v7, v8, v9] = args_gv
+
+        v10 = builder1.genop1('int_is_true', v8)
+        builder2 = builder1.jump_if_false(v10, [v6, v7, v9, v8])
+
+        args_gv = [v6, v7, v8, v9, rgenop.genconst(False)]
+        label1 = builder1.enter_next_block(
+            [signed_kind, signed_kind, signed_kind, signed_kind, bool_kind], args_gv)
+        [v11, v12, v13, v14, v15] = args_gv
+
+        v16 = builder1.genop1('int_is_true', v14)
+        builder3 = builder1.jump_if_true(v16, [v11, v13, v15, v14, v12])
+
+        args_gv = [v11, v13, v14, v14, v15]
+        label2 = builder1.enter_next_block(
+            [signed_kind, signed_kind, signed_kind, signed_kind, bool_kind], args_gv)
+        [v17, v18, v19, v20, v21] = args_gv
+
+        builder4 = builder1.jump_if_false(v21, [v17, v18, v19, v20, v21])
+
+        args_gv = [v19, v18, v19, v20, v21, v17]
+        label3 = builder1.enter_next_block(
+            [signed_kind, signed_kind, signed_kind, signed_kind, bool_kind, signed_kind], args_gv)
+        [v22, v23, v24, v25, v26, v27] = args_gv
+
+        v28 = builder1.genop2('int_sub', v27, rgenop.genconst(1))
+        v29 = builder1.genop1('int_is_true', v28)
+        builder5 = builder1.jump_if_false(v29, [v26, v25, v22])
+        builder1.finish_and_goto([v28, v22, v23, v24], label0)
+
+        builder4.start_writing()
+        v30 = builder4.genop1('cast_bool_to_int', v21)
+        builder4.finish_and_goto([v30, v18, v19, v20, v21, v17], label3)
+
+        builder2.start_writing()
+        builder2.finish_and_goto([v6, v7, v8, v9, rgenop.genconst(True)], label1)
+
+        builder3.start_writing()
+        builder3.finish_and_goto([v11, v13, v14, v12, v15], label2)
+
+        builder5.start_writing()
+        v31 = builder5.genop2('int_add', v25, v22)
+        v32 = builder5.genop1('cast_bool_to_int', v26)
+        v33 = builder5.genop2('int_mul', rgenop.genconst(2), v32)
+        v34 = builder5.genop2('int_add', v31, v33)
+        builder5.finish_and_return(rgenop.sigToken(FUNC5), v34)
+        builder5.end()
+
+        fnptr = self.cast(gv_callable, 5)
+
+        res = fnptr(2, 10, 10, 400, 0)
+        assert res == 0



More information about the Pypy-commit mailing list