[pypy-svn] r36663 - in pypy/branch/i386-regalloc/pypy/jit/codegen: llvm llvm/test test

arigo at codespeak.net arigo at codespeak.net
Sat Jan 13 16:17:42 CET 2007


Author: arigo
Date: Sat Jan 13 16:17:41 2007
New Revision: 36663

Modified:
   pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/rgenop.py
   pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_genc_ts.py
   pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_rgenop.py
   pypy/branch/i386-regalloc/pypy/jit/codegen/test/rgenop_tests.py
Log:
svn merge -r36654:36662 http://codespeak.net/svn/pypy/dist/pypy/jit/codegen


Modified: pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/rgenop.py
==============================================================================
--- pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/rgenop.py	(original)
+++ pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/rgenop.py	Sat Jan 13 16:17:41 2007
@@ -217,7 +217,8 @@
         return '%s %s' % (self.type, self.operand2())
 
     def operand2(self):
-        s = str(llmemory.cast_adr_to_int(self.addr))
+        addr = self.addr
+        s = str(llmemory.cast_adr_to_int(addr))
         if s == '0':
             s = 'null'
         return s

Modified: pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_genc_ts.py
==============================================================================
--- pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_genc_ts.py	(original)
+++ pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_genc_ts.py	Sat Jan 13 16:17:41 2007
@@ -27,5 +27,3 @@
         test_two_loops_merging = skip_too_minimal #segfault
         test_green_char_at_merge = skip #segfault
         test_residual_red_call_with_exc = skip
-    else: #needs fixing for >= 2.0
-        test_array_of_voids = skip

Modified: pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_rgenop.py
==============================================================================
--- pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_rgenop.py	(original)
+++ pypy/branch/i386-regalloc/pypy/jit/codegen/llvm/test/test_rgenop.py	Sat Jan 13 16:17:41 2007
@@ -24,6 +24,4 @@
         test_goto_compile = skip_too_minimal #segfault
         test_fact_direct = skip_too_minimal #segfault
 
-    test_fact_compile = skip #XXX Blocked block, introducted by this checkin (I don't understand)
-    test_calling_pause_direct = skip #segfault, look into later...
-    test_calling_pause_compile = skip # dito
+    test_fact_compile = skip #XXX Blocked block, (addr = self.addr) in AddrConst.operand2()

Modified: pypy/branch/i386-regalloc/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/branch/i386-regalloc/pypy/jit/codegen/test/rgenop_tests.py	(original)
+++ pypy/branch/i386-regalloc/pypy/jit/codegen/test/rgenop_tests.py	Sat Jan 13 16:17:41 2007
@@ -412,6 +412,7 @@
     builder.start_writing()
     builder.finish_and_return(sigtoken, gv_x)
 
+    builder.end()
     return gv_f
 
 def get_func_calling_pause_runner(RGenOp):
@@ -460,6 +461,7 @@
     return_false_builder.start_writing()
     return_false_builder.finish_and_return(sigtoken, rgenop.genconst(0))
 
+    builder.end()
     return gv_f
 
 def make_condition_result_cross_link(rgenop):
@@ -482,6 +484,7 @@
     target2.start_writing()
     target2.finish_and_return(sigtoken, rgenop.genconst(3))
 
+    builder.end()
     return gv_f
 
 class AbstractRGenOpTests(test_boehm.AbstractGCTestClass):
@@ -818,3 +821,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