[pypy-svn] r36726 - pypy/dist/pypy/jit/codegen/test

mwh at codespeak.net mwh at codespeak.net
Sun Jan 14 12:58:29 CET 2007


Author: mwh
Date: Sun Jan 14 12:58:26 2007
New Revision: 36726

Modified:
   pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
a test that calls pause_writing and start_writing in a way that allows the
builder to just carry on without inserting a jump (an optimization I plan to
add to the ppc backend soon).


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	Sun Jan 14 12:58:26 2007
@@ -840,8 +840,7 @@
         rgenop = self.RGenOp()
         signed_kind = rgenop.kindToken(lltype.Signed)
         sigtoken = rgenop.sigToken(FUNC)
-        builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
-                                                       "sameas")
+        builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "sameas")
         gv_nineteen = builder.genop_same_as(signed_kind, rgenop.genconst(19))
         assert not gv_nineteen.is_const   # 'same_as' must return a variable
         builder.finish_and_return(sigtoken, gv_nineteen)
@@ -851,3 +850,35 @@
 
         res = fnptr(17)
         assert res == 19
+
+    def test_pause_and_resume(self):
+        # def f(x):
+        #     y = x + 1
+        #     # pause/resume here
+        #     z = x - 1
+        #     w = y*z
+        #     return w
+        rgenop = self.RGenOp()
+
+        signed_kind = rgenop.kindToken(lltype.Signed)
+        sigtoken = rgenop.sigToken(FUNC)
+        builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "f")
+
+        gv_one = rgenop.genconst(1)
+
+        gv_y = builder.genop2("int_add", gv_x, gv_one)
+
+        builder = builder.pause_writing([gv_x, gv_y])
+        builder.start_writing()
+
+        gv_z = builder.genop2("int_sub", gv_x, gv_one)
+        gv_w = builder.genop2("int_mul", gv_y, gv_z)
+
+        builder.finish_and_return(sigtoken, gv_w)
+
+        builder.end()
+
+        fnptr = self.cast(gv_callable, 1)
+
+        res = fnptr(1)
+        assert res == 0



More information about the Pypy-commit mailing list