[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