[pypy-svn] r36662 - pypy/dist/pypy/jit/codegen/test
arigo at codespeak.net
arigo at codespeak.net
Sat Jan 13 16:16:00 CET 2007
Author: arigo
Date: Sat Jan 13 16:15:59 2007
New Revision: 36662
Modified:
pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
Add a test.
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 Sat Jan 13 16:15:59 2007
@@ -750,3 +750,34 @@
res = fnptr(2)
assert res == 101010
+
+ def test_tight_loop(self):
+ # while 1:
+ # y = x - 7
+ # if y < 0: break
+ # x = y
+ # return x
+ rgenop = self.RGenOp()
+ signed_kind = rgenop.kindToken(lltype.Signed)
+ sigtoken = rgenop.sigToken(FUNC)
+ builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
+ "tightloop")
+ args_gv = [gv_x]
+ loopstart = builder.enter_next_block([signed_kind], args_gv)
+ [gv_x] = args_gv
+
+ gv_y = builder.genop2("int_sub", gv_x, rgenop.genconst(7))
+ gv_cond = builder.genop2("int_lt", gv_y, rgenop.genconst(0))
+ end_builder = builder.jump_if_true(gv_cond, [gv_x])
+ builder.finish_and_goto([gv_y], loopstart)
+
+ end_builder.start_writing()
+ end_builder.finish_and_return(sigtoken, gv_x)
+ builder.end()
+ fnptr = self.cast(gv_callable, 1)
+
+ res = fnptr(5)
+ assert res == 5
+
+ res = fnptr(44)
+ assert res == 2
More information about the Pypy-commit
mailing list