[pypy-svn] r36746 - pypy/dist/pypy/jit/codegen/test
arigo at codespeak.net
arigo at codespeak.net
Sun Jan 14 17:35:20 CET 2007
Author: arigo
Date: Sun Jan 14 17:35:20 2007
New Revision: 36746
Modified:
pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
merging of http://codespeak.net/svn/pypy/branch/i386-regalloc/pypy/jit/codegen/test/rgenop_tests.py
revisions 36404 to 36742:
------------------------------------------------------------------------
r36634 | arigo | 2007-01-13 12:06:05 +0100 (Sat, 13 Jan 2007) | 2 lines
Small fixes, int_floor_div, int_mul.
------------------------------------------------------------------------
r36591 | arigo | 2007-01-12 17:29:16 +0100 (Fri, 12 Jan 2007) | 2 lines
A larger test, using 150 variables at once.
------------------------------------------------------------------------
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 17:35:20 2007
@@ -1,3 +1,4 @@
+import random
from pypy.rpython.annlowlevel import MixLevelAnnotatorPolicy
from pypy.rlib.objectmodel import keepalive_until_here
from pypy.rpython.lltypesystem import lltype
@@ -59,6 +60,62 @@
return res
return dummy_runner
+FUNC100 = lltype.FuncType([lltype.Signed]*100, lltype.Signed)
+
+def largedummy_example():
+ args = [random.randrange(-10, 50) for i in range(100)]
+ total = 0
+ for i in range(0, 100, 2):
+ total += args[i] - args[i+1]
+ return args, total
+
+def make_largedummy(rgenop):
+ # 'return v0-v1+v2-v3+v4-v5...+v98-v99'
+ signed_kind = rgenop.kindToken(lltype.Signed)
+ sigtoken = rgenop.sigToken(FUNC100)
+ builder, gv_largedummyfn, gvs = rgenop.newgraph(sigtoken, "largedummy")
+
+ for i in range(0, 100, 2):
+ gvs.append(builder.genop2("int_sub", gvs[i], gvs[i+1]))
+
+ builder.enter_next_block([signed_kind] * 150, gvs)
+ while len(gvs) > 101:
+ gv_sum = builder.genop2("int_add", gvs.pop(), gvs.pop())
+ gvs.append(gv_sum)
+
+ builder.finish_and_return(sigtoken, gvs.pop())
+
+ builder.end()
+ return gv_largedummyfn
+
+def get_largedummy_runner(RGenOp):
+ def largedummy_runner(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9,
+ v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
+ v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
+ v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
+ v40, v41, v42, v43, v44, v45, v46, v47, v48, v49,
+ v50, v51, v52, v53, v54, v55, v56, v57, v58, v59,
+ v60, v61, v62, v63, v64, v65, v66, v67, v68, v69,
+ v70, v71, v72, v73, v74, v75, v76, v77, v78, v79,
+ v80, v81, v82, v83, v84, v85, v86, v87, v88, v89,
+ v90, v91, v92, v93, v94, v95, v96, v97, v98, v99):
+ rgenop = RGenOp()
+ gv_largedummyfn = make_largedummy(rgenop)
+ largedummyfn = gv_largedummyfn.revealconst(lltype.Ptr(FUNC100))
+ res = largedummyfn(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9,
+ v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
+ v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
+ v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
+ v40, v41, v42, v43, v44, v45, v46, v47, v48, v49,
+ v50, v51, v52, v53, v54, v55, v56, v57, v58, v59,
+ v60, v61, v62, v63, v64, v65, v66, v67, v68, v69,
+ v70, v71, v72, v73, v74, v75, v76, v77, v78, v79,
+ v80, v81, v82, v83, v84, v85, v86, v87, v88, v89,
+ v90, v91, v92, v93, v94, v95, v96, v97, v98, v99)
+ keepalive_until_here(rgenop) # to keep the code blocks alive
+ return res
+ return largedummy_runner
+
def make_branching(rgenop):
# 'if x > 5: return x-1
# else: return y'
@@ -126,9 +183,9 @@
def make_goto(rgenop):
# z = 1
# while x > 0:
- # y += x
- # z *= x
- # x -= 1
+ # z = x * z
+ # y = x + y
+ # x = x - 1
# y += z
# return y
signed_kind = rgenop.kindToken(lltype.Signed)
@@ -544,6 +601,20 @@
res = fn(2)
assert res == 8222
+ def test_largedummy_direct(self):
+ rgenop = self.RGenOp()
+ gv_largedummyfn = make_largedummy(rgenop)
+ fnptr = self.cast(gv_largedummyfn, 100)
+ args, expected = largedummy_example()
+ res = fnptr(*args)
+ assert res == expected
+
+ def test_largedummy_compile(self):
+ fn = self.compile(get_largedummy_runner(self.RGenOp), [int] * 100)
+ args, expected = largedummy_example()
+ res = fn(*args)
+ assert res == expected
+
def test_branching_direct(self):
rgenop = self.RGenOp()
gv_branchingfn = make_branching(rgenop)
More information about the Pypy-commit
mailing list