[pypy-commit] pypy result-in-resops: port a few tests
fijal
noreply at buildbot.pypy.org
Tue Jul 24 18:58:46 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r56432:98559181f082
Date: 2012-07-24 18:58 +0200
http://bitbucket.org/pypy/pypy/changeset/98559181f082/
Log: port a few tests
diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -9,7 +9,7 @@
from pypy.rpython.ootypesystem import ootype
from pypy.rpython.llinterp import LLInterpreter
from pypy.jit.metainterp import history
-from pypy.jit.metainterp.resoperation import REF, INT, FLOAT, STRUCT
+from pypy.jit.metainterp.resoperation import REF, INT, FLOAT, STRUCT, HOLE
from pypy.jit.metainterp.warmstate import unwrap
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.backend import model
@@ -221,7 +221,7 @@
faildescr._fail_args_types = []
for box in op.getfailargs():
if box is None:
- type = history.HOLE
+ type = HOLE
else:
type = box.type
faildescr._fail_args_types.append(type)
diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -11,7 +11,6 @@
create_resop
from pypy.jit.metainterp.typesystem import deref
from pypy.jit.codewriter.effectinfo import EffectInfo
-from pypy.jit.tool.oparser import parse
from pypy.rpython.lltypesystem import lltype, llmemory, rstr, rffi, rclass
from pypy.rpython.ootypesystem import ootype
from pypy.rpython.annlowlevel import llhelper
@@ -109,36 +108,40 @@
class namespace:
faildescr = BasicFailDescr(1)
+ faildescr2 = BasicFailDescr(2)
+ faildescr3 = BasicFailDescr(3)
+ faildescr4 = BasicFailDescr(4)
+ faildescr5 = BasicFailDescr(4)
+ targettoken = TargetToken()
+
+ def parse(self, s, namespace=None):
+ from pypy.jit.tool.oparser import parse
+ if namespace is None:
+ namespace = self.namespace.__dict__
+ loop = parse(s, namespace=namespace)
+ return loop.inputargs, loop.operations, JitCellToken()
def test_compile_linear_loop(self):
- loop = parse("""
+ inputargs, ops, token = self.parse("""
[i0]
i1 = int_add(i0, 1)
finish(i1, descr=faildescr)
- """, namespace=self.namespace.__dict__)
- looptoken = JitCellToken()
- self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
- fail = self.cpu.execute_token(looptoken, 2)
+ """)
+ self.cpu.compile_loop(inputargs, ops, token)
+ fail = self.cpu.execute_token(token, 2)
res = self.cpu.get_latest_value_int(0)
assert res == 3
assert fail.identifier == 1
def test_compile_loop(self):
- i0 = BoxInt()
- i1 = BoxInt()
- i2 = BoxInt()
- looptoken = JitCellToken()
- targettoken = TargetToken()
- operations = [
- ResOperation(rop.LABEL, [i0], None, descr=targettoken),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
- ResOperation(rop.GUARD_TRUE, [i2], None, descr=BasicFailDescr(2)),
- ResOperation(rop.JUMP, [i1], None, descr=targettoken),
- ]
- inputargs = [i0]
- operations[3].setfailargs([i1])
-
+ inputargs, operations, looptoken = self.parse('''
+ [i0]
+ label(i0, descr=targettoken)
+ i1 = int_add(i0, 1)
+ i2 = int_le(i1, 9)
+ guard_true(i2, descr=faildescr2) [i1]
+ jump(i1, descr=targettoken)
+ ''')
self.cpu.compile_loop(inputargs, operations, looptoken)
fail = self.cpu.execute_token(looptoken, 2)
assert fail.identifier == 2
@@ -146,52 +149,40 @@
assert res == 10
def test_compile_with_holes_in_fail_args(self):
- i0 = BoxInt()
- i1 = BoxInt()
- i2 = BoxInt()
- i3 = BoxInt()
- looptoken = JitCellToken()
- targettoken = TargetToken()
- operations = [
- ResOperation(rop.INT_SUB, [i3, ConstInt(42)], i0),
- ResOperation(rop.LABEL, [i0], None, descr=targettoken),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
- ResOperation(rop.GUARD_TRUE, [i2], None, descr=BasicFailDescr(2)),
- ResOperation(rop.JUMP, [i1], None, descr=targettoken),
- ]
- inputargs = [i3]
- operations[4].setfailargs([None, None, i1, None])
+ inputargs, operations, looptoken = self.parse("""
+ [i3]
+ i0 = int_sub(i3, 42)
+ label(i0, descr=targettoken)
+ i1 = int_add(i0, 1)
+ i2 = int_le(i1, 9)
+ guard_true(i2, descr=faildescr3) [None, None, i1, None]
+ jump(i1, descr=targettoken)
+ """)
self.cpu.compile_loop(inputargs, operations, looptoken)
fail = self.cpu.execute_token(looptoken, 44)
- assert fail.identifier == 2
+ assert fail.identifier == 3
res = self.cpu.get_latest_value_int(2)
assert res == 10
def test_backends_dont_keep_loops_alive(self):
import weakref, gc
self.cpu.dont_keepalive_stuff = True
- i0 = BoxInt()
- i1 = BoxInt()
- i2 = BoxInt()
- looptoken = JitCellToken()
- targettoken = TargetToken()
- operations = [
- ResOperation(rop.LABEL, [i0], None, descr=targettoken),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
- ResOperation(rop.GUARD_TRUE, [i2], None, descr=BasicFailDescr()),
- ResOperation(rop.JUMP, [i1], None, descr=targettoken),
- ]
- inputargs = [i0]
- operations[3].setfailargs([i1])
+ inputargs, operations, looptoken = self.parse("""
+ [i0]
+ label(i0, descr=targettoken)
+ i1 = int_add(i0, 1)
+ i2 = int_le(i1, 9)
+ guard_true(i2) [i1]
+ jump(i1, descr=targettoken)
+ """, namespace={'targettoken': TargetToken()})
+ i1 = inputargs[0]
wr_i1 = weakref.ref(i1)
wr_guard = weakref.ref(operations[2])
self.cpu.compile_loop(inputargs, operations, looptoken)
if hasattr(looptoken, '_x86_ops_offset'):
del looptoken._x86_ops_offset # else it's kept alive
- del i0, i1, i2
+ del i1
del inputargs
del operations
gc.collect()
@@ -200,37 +191,27 @@
def test_compile_bridge(self):
self.cpu.total_compiled_loops = 0
self.cpu.total_compiled_bridges = 0
- i0 = BoxInt()
- i1 = BoxInt()
- i2 = BoxInt()
- faildescr1 = BasicFailDescr(1)
- faildescr2 = BasicFailDescr(2)
- looptoken = JitCellToken()
- targettoken = TargetToken()
- operations = [
- ResOperation(rop.LABEL, [i0], None, descr=targettoken),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
- ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr1),
- ResOperation(rop.JUMP, [i1], None, descr=targettoken),
- ]
- inputargs = [i0]
- operations[3].setfailargs([i1])
+ inputargs, operations, looptoken = self.parse("""
+ [i0]
+ label(i0, descr=targettoken)
+ i1 = int_add(i0, 1)
+ i2 = int_le(i1, 9)
+ guard_true(i2, descr=faildescr4) [i1]
+ jump(i1, descr=targettoken)
+ """)
self.cpu.compile_loop(inputargs, operations, looptoken)
- i1b = BoxInt()
- i3 = BoxInt()
- bridge = [
- ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3),
- ResOperation(rop.GUARD_TRUE, [i3], None, descr=faildescr2),
- ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
- ]
- bridge[1].setfailargs([i1b])
-
- self.cpu.compile_bridge(faildescr1, [i1b], bridge, looptoken)
+ inputargs, bridge_ops, _ = self.parse("""
+ [i1b]
+ i3 = int_le(i1b, 19)
+ guard_true(i3, descr=faildescr5) [i1b]
+ jump(i1b, descr=targettoken)
+ """)
+ self.cpu.compile_bridge(self.namespace.faildescr4,
+ inputargs, bridge_ops, looptoken)
fail = self.cpu.execute_token(looptoken, 2)
- assert fail.identifier == 2
+ assert fail.identifier == 4
res = self.cpu.get_latest_value_int(0)
assert res == 20
@@ -239,36 +220,27 @@
return looptoken
def test_compile_bridge_with_holes(self):
- i0 = BoxInt()
- i1 = BoxInt()
- i2 = BoxInt()
- i3 = BoxInt()
faildescr1 = BasicFailDescr(1)
faildescr2 = BasicFailDescr(2)
- looptoken = JitCellToken()
targettoken = TargetToken()
- operations = [
- ResOperation(rop.INT_SUB, [i3, ConstInt(42)], i0),
- ResOperation(rop.LABEL, [i0], None, descr=targettoken),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
- ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr1),
- ResOperation(rop.JUMP, [i1], None, descr=targettoken),
- ]
- inputargs = [i3]
- operations[4].setfailargs([None, i1, None])
+ inputargs, operations, looptoken = self.parse("""
+ [i3]
+ i0 = int_sub(i3, 42)
+ label(i0, descr=targettoken)
+ i1 = int_add(i0, 1)
+ i2 = int_le(i1, 9)
+ guard_true(i2, descr=faildescr1) [None, i1, None]
+ jump(i1, descr=targettoken)
+ """, namespace=locals())
self.cpu.compile_loop(inputargs, operations, looptoken)
- i1b = BoxInt()
- i3 = BoxInt()
- bridge = [
- ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3),
- ResOperation(rop.GUARD_TRUE, [i3], None, descr=faildescr2),
- ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
- ]
- bridge[1].setfailargs([i1b])
-
- self.cpu.compile_bridge(faildescr1, [i1b], bridge, looptoken)
+ inputargs, bridge_ops, _ = self.parse("""
+ [i1b]
+ i3 = int_le(i1b, 19)
+ guard_true(i3, descr=faildescr2) [i1b]
+ jump(i1b, descr=targettoken)
+ """, namespace=locals())
+ self.cpu.compile_bridge(faildescr1, inputargs, bridge_ops, looptoken)
fail = self.cpu.execute_token(looptoken, 2)
assert fail.identifier == 2
@@ -276,36 +248,30 @@
assert res == 20
def test_compile_big_bridge_out_of_small_loop(self):
- i0 = BoxInt()
faildescr1 = BasicFailDescr(1)
- looptoken = JitCellToken()
- operations = [
- ResOperation(rop.GUARD_FALSE, [i0], None, descr=faildescr1),
- ResOperation(rop.FINISH, [], None, descr=BasicFailDescr(2)),
- ]
- inputargs = [i0]
- operations[0].setfailargs([i0])
+ faildescr2 = BasicFailDescr(2)
+ inputargs, operations, looptoken = self.parse("""
+ [i0]
+ guard_false(i0, descr=faildescr1) [i0]
+ finish()
+ """, namespace=locals())
self.cpu.compile_loop(inputargs, operations, looptoken)
- i1list = [BoxInt() for i in range(1000)]
- bridge = []
- iprev = i0
- for i1 in i1list:
- bridge.append(ResOperation(rop.INT_ADD, [iprev, ConstInt(1)], i1))
- iprev = i1
- bridge.append(ResOperation(rop.GUARD_FALSE, [i0], None,
- descr=BasicFailDescr(3)))
- bridge.append(ResOperation(rop.FINISH, [], None,
- descr=BasicFailDescr(4)))
- bridge[-2].setfailargs(i1list)
-
- self.cpu.compile_bridge(faildescr1, [i0], bridge, looptoken)
+ bridge_source = ["[i0]"]
+ for i in range(1000):
+ bridge_source.append("i%d = int_add(i%d, 1)" % (i + 1, i))
+ failargs = ",".join(["i%d" % i for i in range(1000)])
+ bridge_source.append("guard_false(i0, descr=faildescr2) [%s]" % failargs)
+ bridge_source.append("finish()")
+ inputargs, bridge, _ = self.parse("\n".join(bridge_source),
+ namespace=locals())
+ self.cpu.compile_bridge(faildescr1, inputargs, bridge, looptoken)
fail = self.cpu.execute_token(looptoken, 1)
- assert fail.identifier == 3
+ assert fail.identifier == 2
for i in range(1000):
res = self.cpu.get_latest_value_int(i)
- assert res == 2 + i
+ assert res == 1 + i
def test_get_latest_value_count(self):
i0 = BoxInt()
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -9,6 +9,7 @@
FLOAT = 'f'
STRUCT = 's'
VOID = 'v'
+HOLE = '_'
def create_resop_dispatch(opnum, result, args, descr=None):
cls = opclasses[opnum]
More information about the pypy-commit
mailing list