[pypy-commit] pypy jit-targets: hg merge
hakanardo
noreply at buildbot.pypy.org
Wed Nov 9 20:34:55 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-targets
Changeset: r49055:c47ea6944945
Date: 2011-11-09 20:31 +0100
http://bitbucket.org/pypy/pypy/changeset/c47ea6944945/
Log: hg merge
diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -640,8 +640,14 @@
return _op_default_implementation
def op_label(self, _, *args):
- pass
-
+ op = self.loop.operations[self.opindex]
+ assert op.opnum == rop.LABEL
+ assert len(op.args) == len(args)
+ newenv = {}
+ for v, value in zip(op.args, args):
+ newenv[v] = value
+ self.env = newenv
+
def op_debug_merge_point(self, _, *args):
from pypy.jit.metainterp.warmspot import get_stats
try:
diff --git a/pypy/jit/backend/test/calling_convention_test.py b/pypy/jit/backend/test/calling_convention_test.py
--- a/pypy/jit/backend/test/calling_convention_test.py
+++ b/pypy/jit/backend/test/calling_convention_test.py
@@ -2,7 +2,7 @@
AbstractDescr,
BasicFailDescr,
BoxInt, Box, BoxPtr,
- LoopToken,
+ JitCellToken,
ConstInt, ConstPtr,
BoxObj, Const,
ConstObj, BoxFloat, ConstFloat)
@@ -107,7 +107,7 @@
ops += 'finish(f99, %s)\n' % arguments
loop = parse(ops, namespace=locals())
- looptoken = LoopToken()
+ looptoken = JitCellToken()
done_number = self.cpu.get_fail_descr_number(loop.operations[-1].getdescr())
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
expected_result = self._prepare_args(args, floats, ints)
@@ -253,7 +253,7 @@
called_ops += 'finish(f%d, descr=fdescr3)\n' % total_index
# compile called loop
called_loop = parse(called_ops, namespace=locals())
- called_looptoken = LoopToken()
+ called_looptoken = JitCellToken()
called_looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
done_number = self.cpu.get_fail_descr_number(called_loop.operations[-1].getdescr())
self.cpu.compile_loop(called_loop.inputargs, called_loop.operations, called_looptoken)
@@ -284,7 +284,7 @@
# we want to take the fast path
self.cpu.done_with_this_frame_float_v = done_number
try:
- othertoken = LoopToken()
+ othertoken = JitCellToken()
self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
# prepare call to called_loop
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
@@ -3,7 +3,7 @@
AbstractDescr,
BasicFailDescr,
BoxInt, Box, BoxPtr,
- LoopToken, TargetToken,
+ JitCellToken, TargetToken,
ConstInt, ConstPtr,
BoxObj,
ConstObj, BoxFloat, ConstFloat)
@@ -32,7 +32,7 @@
result_type,
valueboxes,
descr)
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(inputargs, operations, looptoken)
j = 0
for box in inputargs:
@@ -106,7 +106,7 @@
ResOperation(rop.FINISH, [i1], None, descr=BasicFailDescr(1))
]
inputargs = [i0]
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(inputargs, operations, looptoken)
self.cpu.set_future_value_int(0, 2)
fail = self.cpu.execute_token(looptoken)
@@ -118,15 +118,17 @@
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
- looptoken = LoopToken()
+ 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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
- operations[2].setfailargs([i1])
+ operations[3].setfailargs([i1])
self.cpu.compile_loop(inputargs, operations, looptoken)
self.cpu.set_future_value_int(0, 2)
@@ -139,18 +141,22 @@
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
- looptoken = LoopToken()
+ 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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
- inputargs = [i0]
- operations[2].setfailargs([None, None, i1, None])
+ inputargs = [i3]
+ operations[4].setfailargs([None, None, i1, None])
self.cpu.compile_loop(inputargs, operations, looptoken)
- self.cpu.set_future_value_int(0, 2)
+ self.cpu.set_future_value_int(0, 44)
fail = self.cpu.execute_token(looptoken)
assert fail.identifier == 2
res = self.cpu.get_latest_value_int(2)
@@ -162,15 +168,17 @@
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
- looptoken = LoopToken()
+ 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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
- operations[2].setfailargs([i1])
+ operations[3].setfailargs([i1])
wr_i1 = weakref.ref(i1)
wr_guard = weakref.ref(operations[2])
self.cpu.compile_loop(inputargs, operations, looptoken)
@@ -190,15 +198,17 @@
i2 = BoxInt()
faildescr1 = BasicFailDescr(1)
faildescr2 = BasicFailDescr(2)
- looptoken = LoopToken()
+ 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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
- operations[2].setfailargs([i1])
+ operations[3].setfailargs([i1])
self.cpu.compile_loop(inputargs, operations, looptoken)
i1b = BoxInt()
@@ -206,7 +216,7 @@
bridge = [
ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3),
ResOperation(rop.GUARD_TRUE, [i3], None, descr=faildescr2),
- ResOperation(rop.JUMP, [i1b], None, descr=looptoken),
+ ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
]
bridge[1].setfailargs([i1b])
@@ -226,17 +236,21 @@
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
+ i3 = BoxInt()
faildescr1 = BasicFailDescr(1)
faildescr2 = BasicFailDescr(2)
- looptoken = LoopToken()
+ 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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
- inputargs = [i0]
- operations[2].setfailargs([None, i1, None])
+ inputargs = [i3]
+ operations[4].setfailargs([None, i1, None])
self.cpu.compile_loop(inputargs, operations, looptoken)
i1b = BoxInt()
@@ -244,7 +258,7 @@
bridge = [
ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3),
ResOperation(rop.GUARD_TRUE, [i3], None, descr=faildescr2),
- ResOperation(rop.JUMP, [i1b], None, descr=looptoken),
+ ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
]
bridge[1].setfailargs([i1b])
@@ -261,15 +275,17 @@
i1 = BoxInt()
i2 = BoxInt()
faildescr1 = BasicFailDescr(1)
- looptoken = LoopToken()
+ 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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
- operations[2].setfailargs([None, i1, None])
+ operations[3].setfailargs([None, i1, None])
self.cpu.compile_loop(inputargs, operations, looptoken)
self.cpu.set_future_value_int(0, 2)
@@ -290,7 +306,7 @@
return AbstractFailDescr.__setattr__(self, name, value)
py.test.fail("finish descrs should not be touched")
faildescr = UntouchableFailDescr() # to check that is not touched
- looptoken = LoopToken()
+ looptoken = JitCellToken()
operations = [
ResOperation(rop.FINISH, [i0], None, descr=faildescr)
]
@@ -301,7 +317,7 @@
res = self.cpu.get_latest_value_int(0)
assert res == 99
- looptoken = LoopToken()
+ looptoken = JitCellToken()
operations = [
ResOperation(rop.FINISH, [ConstInt(42)], None, descr=faildescr)
]
@@ -311,7 +327,7 @@
res = self.cpu.get_latest_value_int(0)
assert res == 42
- looptoken = LoopToken()
+ looptoken = JitCellToken()
operations = [
ResOperation(rop.FINISH, [], None, descr=faildescr)
]
@@ -320,7 +336,7 @@
assert fail is faildescr
if self.cpu.supports_floats:
- looptoken = LoopToken()
+ looptoken = JitCellToken()
f0 = BoxFloat()
operations = [
ResOperation(rop.FINISH, [f0], None, descr=faildescr)
@@ -333,7 +349,7 @@
res = self.cpu.get_latest_value_float(0)
assert longlong.getrealfloat(res) == -61.25
- looptoken = LoopToken()
+ looptoken = JitCellToken()
operations = [
ResOperation(rop.FINISH, [constfloat(42.5)], None, descr=faildescr)
]
@@ -350,14 +366,16 @@
z = BoxInt(579)
t = BoxInt(455)
u = BoxInt(0) # False
- looptoken = LoopToken()
+ looptoken = JitCellToken()
+ targettoken = TargetToken()
operations = [
+ ResOperation(rop.LABEL, [y, x], None, descr=targettoken),
ResOperation(rop.INT_ADD, [x, y], z),
ResOperation(rop.INT_SUB, [y, ConstInt(1)], t),
ResOperation(rop.INT_EQ, [t, ConstInt(0)], u),
ResOperation(rop.GUARD_FALSE, [u], None,
descr=BasicFailDescr()),
- ResOperation(rop.JUMP, [z, t], None, descr=looptoken),
+ ResOperation(rop.JUMP, [t, z], None, descr=targettoken),
]
operations[-2].setfailargs([t, z])
cpu.compile_loop([x, y], operations, looptoken)
@@ -419,7 +437,7 @@
]
ops[1].setfailargs([v_res])
#
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([v1, v2], ops, looptoken)
for x, y, z in testcases:
excvalue = self.cpu.grab_exc_value()
@@ -1082,16 +1100,18 @@
inputargs.insert(index_counter, i0)
jumpargs.insert(index_counter, i1)
#
- looptoken = LoopToken()
+ looptoken = JitCellToken()
+ targettoken = TargetToken()
faildescr = BasicFailDescr(15)
operations = [
+ ResOperation(rop.LABEL, inputargs, None, descr=targettoken),
ResOperation(rop.INT_SUB, [i0, ConstInt(1)], i1),
ResOperation(rop.INT_GE, [i1, ConstInt(0)], i2),
ResOperation(rop.GUARD_TRUE, [i2], None),
- ResOperation(rop.JUMP, jumpargs, None, descr=looptoken),
+ ResOperation(rop.JUMP, jumpargs, None, descr=targettoken),
]
- operations[2].setfailargs(inputargs[:])
- operations[2].setdescr(faildescr)
+ operations[3].setfailargs(inputargs[:])
+ operations[3].setdescr(faildescr)
#
self.cpu.compile_loop(inputargs, operations, looptoken)
#
@@ -1149,22 +1169,24 @@
py.test.skip("requires floats")
fboxes = [BoxFloat() for i in range(12)]
i2 = BoxInt()
+ targettoken = TargetToken()
faildescr1 = BasicFailDescr(1)
faildescr2 = BasicFailDescr(2)
operations = [
+ ResOperation(rop.LABEL, fboxes, None, descr=targettoken),
ResOperation(rop.FLOAT_LE, [fboxes[0], constfloat(9.2)], i2),
ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr1),
ResOperation(rop.FINISH, fboxes, None, descr=faildescr2),
]
operations[-2].setfailargs(fboxes)
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(fboxes, operations, looptoken)
fboxes2 = [BoxFloat() for i in range(12)]
f3 = BoxFloat()
bridge = [
ResOperation(rop.FLOAT_SUB, [fboxes2[0], constfloat(1.0)], f3),
- ResOperation(rop.JUMP, [f3] + fboxes2[1:], None, descr=looptoken),
+ ResOperation(rop.JUMP, [f3]+fboxes2[1:], None, descr=targettoken),
]
self.cpu.compile_bridge(faildescr1, fboxes2, bridge, looptoken)
@@ -1214,7 +1236,7 @@
ResOperation(rop.FINISH, [], None, descr=faildescr2),
]
operations[-2].setfailargs([])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(inputargs, operations, looptoken)
#
cpu = self.cpu
@@ -1271,7 +1293,7 @@
ResOperation(rop.FINISH, [], None, descr=faildescr2),
]
operations[-2].setfailargs([])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(inputargs, operations, looptoken)
#
cpu = self.cpu
@@ -1330,7 +1352,7 @@
faildescr = BasicFailDescr(1)
operations.append(ResOperation(rop.FINISH, [], None,
descr=faildescr))
- looptoken = LoopToken()
+ looptoken = JitCellToken()
#
self.cpu.compile_loop(inputargs, operations, looptoken)
#
@@ -1400,7 +1422,7 @@
ResOperation(rop.FINISH, [], None,
descr=BasicFailDescr(5))]
operations[1].setfailargs([])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
# Use "set" to unique-ify inputargs
unique_testcase_list = list(set(testcase))
self.cpu.compile_loop(unique_testcase_list, operations,
@@ -1675,15 +1697,16 @@
exc_tp = xtp
exc_ptr = xptr
loop = parse(ops, self.cpu, namespace=locals())
- self.cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
+ looptoken = JitCellToken()
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
self.cpu.set_future_value_int(0, 1)
- self.cpu.execute_token(loop.token)
+ self.cpu.execute_token(looptoken)
assert self.cpu.get_latest_value_int(0) == 0
assert self.cpu.get_latest_value_ref(1) == xptr
excvalue = self.cpu.grab_exc_value()
assert not excvalue
self.cpu.set_future_value_int(0, 0)
- self.cpu.execute_token(loop.token)
+ self.cpu.execute_token(looptoken)
assert self.cpu.get_latest_value_int(0) == 1
excvalue = self.cpu.grab_exc_value()
assert not excvalue
@@ -1700,9 +1723,10 @@
exc_tp = ytp
exc_ptr = yptr
loop = parse(ops, self.cpu, namespace=locals())
- self.cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
+ looptoken = JitCellToken()
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
self.cpu.set_future_value_int(0, 1)
- self.cpu.execute_token(loop.token)
+ self.cpu.execute_token(looptoken)
assert self.cpu.get_latest_value_int(0) == 1
excvalue = self.cpu.grab_exc_value()
assert excvalue == yptr
@@ -1718,14 +1742,15 @@
finish(0)
'''
loop = parse(ops, self.cpu, namespace=locals())
- self.cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
+ looptoken = JitCellToken()
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
self.cpu.set_future_value_int(0, 1)
- self.cpu.execute_token(loop.token)
+ self.cpu.execute_token(looptoken)
assert self.cpu.get_latest_value_int(0) == 1
excvalue = self.cpu.grab_exc_value()
assert excvalue == xptr
self.cpu.set_future_value_int(0, 0)
- self.cpu.execute_token(loop.token)
+ self.cpu.execute_token(looptoken)
assert self.cpu.get_latest_value_int(0) == 0
excvalue = self.cpu.grab_exc_value()
assert not excvalue
@@ -1895,7 +1920,7 @@
ResOperation(rop.FINISH, [i0], None, descr=BasicFailDescr(0))
]
ops[2].setfailargs([i1, i0])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i0, i1], ops, looptoken)
self.cpu.set_future_value_int(0, 20)
self.cpu.set_future_value_int(1, 0)
@@ -1940,7 +1965,7 @@
ResOperation(rop.FINISH, [i2], None, descr=BasicFailDescr(0))
]
ops[2].setfailargs([i1, i2, i0])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i0, i1], ops, looptoken)
self.cpu.set_future_value_int(0, 20)
self.cpu.set_future_value_int(1, 0)
@@ -1986,7 +2011,7 @@
ResOperation(rop.FINISH, [f2], None, descr=BasicFailDescr(0))
]
ops[2].setfailargs([i1, f2, i0])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i0, i1], ops, looptoken)
self.cpu.set_future_value_int(0, 20)
self.cpu.set_future_value_int(1, 0)
@@ -2031,7 +2056,7 @@
ResOperation(rop.FINISH, [i2], None, descr=BasicFailDescr(0))
]
ops[1].setfailargs([i1, i2])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i1], ops, looptoken)
self.cpu.set_future_value_int(0, ord('G'))
fail = self.cpu.execute_token(looptoken)
@@ -2091,7 +2116,7 @@
ResOperation(rop.FINISH, [], None, descr=BasicFailDescr(0))
]
ops[1].setfailargs([])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i0, i1, i2, i3], ops, looptoken)
self.cpu.set_future_value_int(0, rffi.cast(lltype.Signed, raw))
self.cpu.set_future_value_int(1, 2)
@@ -2147,7 +2172,7 @@
ops += [
ResOperation(rop.FINISH, [i3], None, descr=BasicFailDescr(0))
]
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i1, i2], ops, looptoken)
buffer = lltype.malloc(rffi.CCHARP.TO, buflen, flavor='raw')
@@ -2169,7 +2194,7 @@
ResOperation(rop.FINISH, [i0], None, descr=BasicFailDescr(0))
]
ops[0].setfailargs([i1])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i0, i1], ops, looptoken)
self.cpu.set_future_value_int(0, -42)
@@ -2415,7 +2440,7 @@
i18 = int_add(i17, i9)
finish(i18)'''
loop = parse(ops)
- looptoken = LoopToken()
+ looptoken = JitCellToken()
looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
ARGS = [lltype.Signed] * 10
@@ -2435,7 +2460,7 @@
finish(i11)
'''
loop = parse(ops, namespace=locals())
- othertoken = LoopToken()
+ othertoken = JitCellToken()
self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
for i in range(10):
self.cpu.set_future_value_int(i, i+1)
@@ -2471,7 +2496,7 @@
finish(f2)'''
loop = parse(ops)
done_number = self.cpu.get_fail_descr_number(loop.operations[-1].getdescr())
- looptoken = LoopToken()
+ looptoken = JitCellToken()
looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
self.cpu.set_future_value_float(0, longlong.getfloatstorage(1.2))
@@ -2486,7 +2511,7 @@
finish(f3)
'''
loop = parse(ops, namespace=locals())
- othertoken = LoopToken()
+ othertoken = JitCellToken()
self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
self.cpu.set_future_value_float(0, longlong.getfloatstorage(1.2))
self.cpu.set_future_value_float(1, longlong.getfloatstorage(3.2))
@@ -2499,7 +2524,7 @@
del called[:]
self.cpu.done_with_this_frame_float_v = done_number
try:
- othertoken = LoopToken()
+ othertoken = JitCellToken()
self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
self.cpu.set_future_value_float(0, longlong.getfloatstorage(1.2))
self.cpu.set_future_value_float(1, longlong.getfloatstorage(3.2))
@@ -2561,7 +2586,7 @@
f2 = float_add(f0, f1)
finish(f2)'''
loop = parse(ops)
- looptoken = LoopToken()
+ looptoken = JitCellToken()
looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
self.cpu.set_future_value_float(0, longlong.getfloatstorage(1.25))
@@ -2578,7 +2603,7 @@
finish(f3)
'''
loop = parse(ops, namespace=locals())
- othertoken = LoopToken()
+ othertoken = JitCellToken()
self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
# normal call_assembler: goes to looptoken
@@ -2596,7 +2621,7 @@
f2 = float_sub(f0, f1)
finish(f2)'''
loop = parse(ops)
- looptoken2 = LoopToken()
+ looptoken2 = JitCellToken()
looptoken2.outermost_jitdriver_sd = FakeJitDriverSD()
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken2)
@@ -2958,7 +2983,7 @@
ResOperation(rop.FINISH, [p0], None, descr=BasicFailDescr(1))
]
inputargs = [i0]
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(inputargs, operations, looptoken)
# overflowing value:
self.cpu.set_future_value_int(0, sys.maxint // 4 + 1)
@@ -2970,21 +2995,23 @@
i1 = BoxInt()
i2 = BoxInt()
i3 = BoxInt()
- looptoken = LoopToken()
- targettoken = TargetToken(None)
+ looptoken = JitCellToken()
+ targettoken1 = TargetToken()
+ targettoken2 = TargetToken()
faildescr = BasicFailDescr(2)
operations = [
+ ResOperation(rop.LABEL, [i0], None, descr=targettoken1),
ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr),
- ResOperation(rop.LABEL, [i1], None, descr=targettoken),
+ ResOperation(rop.LABEL, [i1], None, descr=targettoken2),
ResOperation(rop.INT_GE, [i1, ConstInt(0)], i3),
ResOperation(rop.GUARD_TRUE, [i3], None, descr=BasicFailDescr(3)),
- ResOperation(rop.JUMP, [i1], None, descr=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken1),
]
inputargs = [i0]
- operations[2].setfailargs([i1])
- operations[5].setfailargs([i1])
+ operations[3].setfailargs([i1])
+ operations[6].setfailargs([i1])
self.cpu.compile_loop(inputargs, operations, looptoken)
self.cpu.set_future_value_int(0, 2)
@@ -2996,7 +3023,7 @@
inputargs = [i0]
operations = [
ResOperation(rop.INT_SUB, [i0, ConstInt(20)], i2),
- ResOperation(rop.JUMP, [i2], None, descr=targettoken),
+ ResOperation(rop.JUMP, [i2], None, descr=targettoken2),
]
self.cpu.compile_bridge(faildescr, inputargs, operations, looptoken)
diff --git a/pypy/jit/backend/test/test_random.py b/pypy/jit/backend/test/test_random.py
--- a/pypy/jit/backend/test/test_random.py
+++ b/pypy/jit/backend/test/test_random.py
@@ -3,8 +3,8 @@
from pypy.rlib.rarithmetic import intmask, LONG_BIT
from pypy.rpython.lltypesystem import llmemory
from pypy.jit.metainterp.history import BasicFailDescr, TreeLoop
-from pypy.jit.metainterp.history import BoxInt, ConstInt, LoopToken
-from pypy.jit.metainterp.history import BoxPtr, ConstPtr
+from pypy.jit.metainterp.history import BoxInt, ConstInt, JitCellToken
+from pypy.jit.metainterp.history import BoxPtr, ConstPtr, TargetToken
from pypy.jit.metainterp.history import BoxFloat, ConstFloat, Const
from pypy.jit.metainterp.resoperation import ResOperation, rop
from pypy.jit.metainterp.executor import execute_nonspec
@@ -179,7 +179,7 @@
#print >>s, ' operations[%d].suboperations = [' % i
#print >>s, ' ResOperation(rop.FAIL, [%s], None)]' % (
# ', '.join([names[v] for v in op.args]))
- print >>s, ' looptoken = LoopToken()'
+ print >>s, ' looptoken = JitCellToken()'
print >>s, ' cpu.compile_loop(inputargs, operations, looptoken)'
if hasattr(self.loop, 'inputargs'):
for i, v in enumerate(self.loop.inputargs):
@@ -536,13 +536,15 @@
loop = TreeLoop('test_random_function')
loop.inputargs = startvars[:]
loop.operations = []
- loop.token = LoopToken()
-
+ loop._jitcelltoken = JitCellToken()
+ loop._targettoken = TargetToken()
+ loop.operations.append(ResOperation(rop.LABEL, loop.inputargs, None,
+ loop._targettoken))
builder = builder_factory(cpu, loop, startvars[:])
self.generate_ops(builder, r, loop, startvars)
self.builder = builder
self.loop = loop
- cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
+ cpu.compile_loop(loop.inputargs, loop.operations, loop._jitcelltoken)
def generate_ops(self, builder, r, loop, startvars):
block_length = pytest.config.option.block_length
@@ -615,7 +617,7 @@
cpu.set_future_value_float(i, box.value)
else:
raise NotImplementedError(box)
- fail = cpu.execute_token(self.loop.token)
+ fail = cpu.execute_token(self.loop._jitcelltoken)
assert fail is self.should_fail_by.getdescr()
for i, v in enumerate(self.get_fail_args()):
if isinstance(v, (BoxFloat, ConstFloat)):
@@ -684,23 +686,25 @@
rl = RandomLoop(self.builder.cpu, self.builder.fork,
r, args)
self.cpu.compile_loop(rl.loop.inputargs, rl.loop.operations,
- rl.loop.token)
+ rl.loop._jitcelltoken)
# done
self.should_fail_by = rl.should_fail_by
self.expected = rl.expected
assert len(rl.loop.inputargs) == len(args)
# The new bridge's execution will end normally at its FINISH.
# Just replace the FINISH with the JUMP to the new loop.
- jump_op = ResOperation(rop.JUMP, subset, None, descr=rl.loop.token)
+ jump_op = ResOperation(rop.JUMP, subset, None,
+ descr=rl.loop._targettoken)
subloop.operations[-1] = jump_op
self.guard_op = rl.guard_op
self.prebuilt_ptr_consts += rl.prebuilt_ptr_consts
- self.loop.token.record_jump_to(rl.loop.token)
+ self.loop._jitcelltoken.record_jump_to(rl.loop._jitcelltoken)
self.dont_generate_more = True
if r.random() < .05:
return False
self.builder.cpu.compile_bridge(fail_descr, fail_args,
- subloop.operations, self.loop.token)
+ subloop.operations,
+ self.loop._jitcelltoken)
return True
def check_random_function(cpu, BuilderClass, r, num=None, max=None):
diff --git a/pypy/jit/backend/x86/assembler.py b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -2,8 +2,8 @@
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.backend.llsupport.asmmemmgr import MachineDataBlockWrapper
from pypy.jit.metainterp.history import Const, Box, BoxInt, ConstInt
-from pypy.jit.metainterp.history import (AbstractFailDescr, INT, REF, FLOAT,
- LoopToken)
+from pypy.jit.metainterp.history import AbstractFailDescr, INT, REF, FLOAT
+from pypy.jit.metainterp.history import JitCellToken
from pypy.rpython.lltypesystem import lltype, rffi, rstr, llmemory
from pypy.rpython.lltypesystem.lloperation import llop
from pypy.rpython.annlowlevel import llhelper
@@ -424,8 +424,6 @@
_x86_loop_code (an integer giving an address)
_x86_bootstrap_code (an integer giving an address)
_x86_direct_bootstrap_code ( " " " " )
- _x86_frame_depth
- _x86_param_depth
_x86_arglocs
_x86_debug_checksum
'''
@@ -455,12 +453,11 @@
stackadjustpos = self._assemble_bootstrap_code(inputargs, arglocs)
looppos = self.mc.get_relative_pos()
looptoken._x86_loop_code = looppos
- self.target_tokens_currently_compiling[looptoken] = None
- looptoken._x86_frame_depth = -1 # temporarily
- looptoken._x86_param_depth = -1 # temporarily
+ clt.frame_depth = -1 # temporarily
+ clt.param_depth = -1 # temporarily
frame_depth, param_depth = self._assemble(regalloc, operations)
- looptoken._x86_frame_depth = frame_depth
- looptoken._x86_param_depth = param_depth
+ clt.frame_depth = frame_depth
+ clt.param_depth = param_depth
directbootstrappos = self.mc.get_relative_pos()
self._assemble_bootstrap_direct_call(arglocs, looppos,
@@ -670,8 +667,8 @@
faildescr._x86_adr_jump_offset = 0 # means "patched"
def fixup_target_tokens(self, rawstart):
- for looptoken in self.target_tokens_currently_compiling:
- looptoken._x86_loop_code += rawstart
+ for targettoken in self.target_tokens_currently_compiling:
+ targettoken._x86_loop_code += rawstart
self.target_tokens_currently_compiling = None
@specialize.argtype(1)
@@ -703,8 +700,8 @@
param_depth = regalloc.param_depth
jump_target_descr = regalloc.jump_target_descr
if jump_target_descr is not None:
- target_frame_depth = jump_target_descr._x86_frame_depth
- target_param_depth = jump_target_descr._x86_param_depth
+ target_frame_depth = jump_target_descr._x86_clt.frame_depth
+ target_param_depth = jump_target_descr._x86_clt.param_depth
frame_depth = max(frame_depth, target_frame_depth)
param_depth = max(param_depth, target_param_depth)
return frame_depth, param_depth
@@ -2344,7 +2341,7 @@
fail_index = self.cpu.get_fail_descr_number(faildescr)
self.mc.MOV_bi(FORCE_INDEX_OFS, fail_index)
descr = op.getdescr()
- assert isinstance(descr, LoopToken)
+ assert isinstance(descr, JitCellToken)
assert len(arglocs) - 2 == len(descr._x86_arglocs[0])
#
# Write a call to the direct_bootstrap_code of the target assembler
@@ -2578,12 +2575,9 @@
gcrootmap.put(self.gcrootmap_retaddr_forced, mark)
self.gcrootmap_retaddr_forced = -1
- def target_arglocs(self, loop_token):
- return loop_token._x86_arglocs
-
- def closing_jump(self, loop_token):
- target = loop_token._x86_loop_code
- if loop_token in self.target_tokens_currently_compiling:
+ def closing_jump(self, target_token):
+ target = target_token._x86_loop_code
+ if target_token in self.target_tokens_currently_compiling:
curpos = self.mc.get_relative_pos() + 5
self.mc.JMP_l(target - curpos)
else:
diff --git a/pypy/jit/backend/x86/regalloc.py b/pypy/jit/backend/x86/regalloc.py
--- a/pypy/jit/backend/x86/regalloc.py
+++ b/pypy/jit/backend/x86/regalloc.py
@@ -5,8 +5,8 @@
import os
from pypy.jit.metainterp.history import (Box, Const, ConstInt, ConstPtr,
ResOperation, BoxPtr, ConstFloat,
- BoxFloat, LoopToken, INT, REF, FLOAT,
- TargetToken)
+ BoxFloat, INT, REF, FLOAT,
+ TargetToken, JitCellToken)
from pypy.jit.backend.x86.regloc import *
from pypy.rpython.lltypesystem import lltype, rffi, rstr
from pypy.rlib.objectmodel import we_are_translated
@@ -884,7 +884,7 @@
def consider_call_assembler(self, op, guard_op):
descr = op.getdescr()
- assert isinstance(descr, LoopToken)
+ assert isinstance(descr, JitCellToken)
jd = descr.outermost_jitdriver_sd
assert jd is not None
size = jd.portal_calldescr.get_result_size(self.translate_support_code)
@@ -1314,8 +1314,8 @@
assembler = self.assembler
assert self.jump_target_descr is None
descr = op.getdescr()
- assert isinstance(descr, (LoopToken, TargetToken)) # XXX refactor!
- nonfloatlocs, floatlocs = assembler.target_arglocs(descr)
+ assert isinstance(descr, TargetToken)
+ nonfloatlocs, floatlocs = descr._x86_arglocs
self.jump_target_descr = descr
# compute 'tmploc' to be all_regs[0] by spilling what is there
box = TempBox()
@@ -1396,19 +1396,32 @@
inputargs = op.getarglist()
floatlocs = [None] * len(inputargs)
nonfloatlocs = [None] * len(inputargs)
+ #
+ # we need to make sure that the tmpreg and xmmtmp are free
+ tmpreg = X86RegisterManager.all_regs[0]
+ tmpvar = TempBox()
+ self.rm.force_allocate_reg(tmpvar, selected_reg=tmpreg)
+ self.rm.possibly_free_var(tmpvar)
+ #
+ xmmtmp = X86XMMRegisterManager.all_regs[0]
+ tmpvar = TempBox()
+ self.xrm.force_allocate_reg(tmpvar, selected_reg=xmmtmp)
+ self.xrm.possibly_free_var(tmpvar)
+ #
for i in range(len(inputargs)):
arg = inputargs[i]
assert not isinstance(arg, Const)
loc = self.loc(arg)
+ assert not (loc is tmpreg or loc is xmmtmp)
if arg.type == FLOAT:
floatlocs[i] = loc
else:
nonfloatlocs[i] = loc
descr._x86_arglocs = nonfloatlocs, floatlocs
descr._x86_loop_code = self.assembler.mc.get_relative_pos()
- descr._x86_frame_depth = self.fm.frame_depth
- descr._x86_param_depth = self.param_depth
+ descr._x86_clt = self.assembler.current_clt
self.assembler.target_tokens_currently_compiling[descr] = None
+ self.possibly_free_vars_for_op(op)
def not_implemented_op(self, op):
not_implemented("not implemented operation: %s" % op.getopname())
diff --git a/pypy/jit/backend/x86/runner.py b/pypy/jit/backend/x86/runner.py
--- a/pypy/jit/backend/x86/runner.py
+++ b/pypy/jit/backend/x86/runner.py
@@ -215,14 +215,3 @@
super(CPU_X86_64, self).__init__(*args, **kwargs)
CPU = CPU386
-
-# silence warnings
-##history.LoopToken._x86_param_depth = 0
-##history.LoopToken._x86_arglocs = (None, None)
-##history.LoopToken._x86_frame_depth = 0
-##history.LoopToken._x86_bootstrap_code = 0
-##history.LoopToken._x86_direct_bootstrap_code = 0
-##history.LoopToken._x86_loop_code = 0
-##history.LoopToken._x86_debug_checksum = 0
-##compile.AbstractFailDescr._x86_current_depths = (0, 0)
-##compile.AbstractFailDescr._x86_adr_jump_offset = 0
diff --git a/pypy/jit/backend/x86/test/test_regalloc.py b/pypy/jit/backend/x86/test/test_regalloc.py
--- a/pypy/jit/backend/x86/test/test_regalloc.py
+++ b/pypy/jit/backend/x86/test/test_regalloc.py
@@ -4,7 +4,7 @@
import py
from pypy.jit.metainterp.history import BoxInt, ConstInt,\
- BoxPtr, ConstPtr, LoopToken, BasicFailDescr
+ BoxPtr, ConstPtr, BasicFailDescr, JitCellToken, TargetToken
from pypy.jit.metainterp.resoperation import rop, ResOperation
from pypy.jit.backend.llsupport.descr import GcCache
from pypy.jit.backend.detect_cpu import getcpuclass
@@ -96,6 +96,8 @@
raising_calldescr = cpu.calldescrof(FPTR.TO, FPTR.TO.ARGS, FPTR.TO.RESULT,
EffectInfo.MOST_GENERAL)
+ targettoken = TargetToken()
+ targettoken2 = TargetToken()
fdescr1 = BasicFailDescr(1)
fdescr2 = BasicFailDescr(2)
fdescr3 = BasicFailDescr(3)
@@ -134,7 +136,8 @@
def interpret(self, ops, args, run=True):
loop = self.parse(ops)
- self.cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
+ looptoken = JitCellToken()
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
for i, arg in enumerate(args):
if isinstance(arg, int):
self.cpu.set_future_value_int(i, arg)
@@ -145,8 +148,9 @@
assert isinstance(lltype.typeOf(arg), lltype.Ptr)
llgcref = lltype.cast_opaque_ptr(llmemory.GCREF, arg)
self.cpu.set_future_value_ref(i, llgcref)
+ loop._jitcelltoken = looptoken
if run:
- self.cpu.execute_token(loop.token)
+ self.cpu.execute_token(looptoken)
return loop
def getint(self, index):
@@ -167,10 +171,7 @@
gcref = self.cpu.get_latest_value_ref(index)
return lltype.cast_opaque_ptr(T, gcref)
- def attach_bridge(self, ops, loop, guard_op_index, looptoken=None, **kwds):
- if looptoken is not None:
- self.namespace = self.namespace.copy()
- self.namespace['looptoken'] = looptoken
+ def attach_bridge(self, ops, loop, guard_op_index, **kwds):
guard_op = loop.operations[guard_op_index]
assert guard_op.is_guard()
bridge = self.parse(ops, **kwds)
@@ -178,20 +179,21 @@
[box.type for box in guard_op.getfailargs()])
faildescr = guard_op.getdescr()
self.cpu.compile_bridge(faildescr, bridge.inputargs, bridge.operations,
- loop.token)
+ loop._jitcelltoken)
return bridge
def run(self, loop):
- return self.cpu.execute_token(loop.token)
+ return self.cpu.execute_token(loop._jitcelltoken)
class TestRegallocSimple(BaseTestRegalloc):
def test_simple_loop(self):
ops = '''
[i0]
+ label(i0, descr=targettoken)
i1 = int_add(i0, 1)
i2 = int_lt(i1, 20)
guard_true(i2) [i1]
- jump(i1)
+ jump(i1, descr=targettoken)
'''
self.interpret(ops, [0])
assert self.getint(0) == 20
@@ -199,27 +201,29 @@
def test_two_loops_and_a_bridge(self):
ops = '''
[i0, i1, i2, i3]
+ label(i0, i1, i2, i3, descr=targettoken)
i4 = int_add(i0, 1)
i5 = int_lt(i4, 20)
guard_true(i5) [i4, i1, i2, i3]
- jump(i4, i1, i2, i3)
+ jump(i4, i1, i2, i3, descr=targettoken)
'''
loop = self.interpret(ops, [0, 0, 0, 0])
ops2 = '''
[i5]
+ label(i5, descr=targettoken2)
i1 = int_add(i5, 1)
i3 = int_add(i1, 1)
i4 = int_add(i3, 1)
i2 = int_lt(i4, 30)
guard_true(i2) [i4]
- jump(i4)
+ jump(i4, descr=targettoken2)
'''
loop2 = self.interpret(ops2, [0])
bridge_ops = '''
[i4]
- jump(i4, i4, i4, i4, descr=looptoken)
+ jump(i4, i4, i4, i4, descr=targettoken)
'''
- bridge = self.attach_bridge(bridge_ops, loop2, 4, looptoken=loop.token)
+ bridge = self.attach_bridge(bridge_ops, loop2, 5)
self.cpu.set_future_value_int(0, 0)
self.run(loop2)
assert self.getint(0) == 31
@@ -230,10 +234,11 @@
def test_pointer_arg(self):
ops = '''
[i0, p0]
+ label(i0, p0, descr=targettoken)
i1 = int_add(i0, 1)
i2 = int_lt(i1, 10)
guard_true(i2) [p0]
- jump(i1, p0)
+ jump(i1, p0, descr=targettoken)
'''
S = lltype.GcStruct('S')
ptr = lltype.malloc(S)
@@ -311,10 +316,11 @@
def test_spill_for_constant(self):
ops = '''
[i0, i1, i2, i3]
+ label(i0, i1, i2, i3, descr=targettoken)
i4 = int_add(3, i1)
i5 = int_lt(i4, 30)
guard_true(i5) [i0, i4, i2, i3]
- jump(1, i4, 3, 4)
+ jump(1, i4, 3, 4, descr=targettoken)
'''
self.interpret(ops, [0, 0, 0, 0])
assert self.getints(4) == [1, 30, 3, 4]
@@ -322,31 +328,34 @@
def test_spill_for_constant_lshift(self):
ops = '''
[i0, i2, i1, i3]
+ label(i0, i2, i1, i3, descr=targettoken)
i4 = int_lshift(1, i1)
i5 = int_add(1, i1)
i6 = int_lt(i5, 30)
guard_true(i6) [i4, i5, i2, i3]
- jump(i4, 3, i5, 4)
+ jump(i4, 3, i5, 4, descr=targettoken)
'''
self.interpret(ops, [0, 0, 0, 0])
assert self.getints(4) == [1<<29, 30, 3, 4]
ops = '''
[i0, i1, i2, i3]
+ label(i0, i1, i2, i3, descr=targettoken)
i4 = int_lshift(1, i1)
i5 = int_add(1, i1)
i6 = int_lt(i5, 30)
guard_true(i6) [i4, i5, i2, i3]
- jump(i4, i5, 3, 4)
+ jump(i4, i5, 3, 4, descr=targettoken)
'''
self.interpret(ops, [0, 0, 0, 0])
assert self.getints(4) == [1<<29, 30, 3, 4]
ops = '''
[i0, i3, i1, i2]
+ label(i0, i3, i1, i2, descr=targettoken)
i4 = int_lshift(1, i1)
i5 = int_add(1, i1)
i6 = int_lt(i5, 30)
guard_true(i6) [i4, i5, i2, i3]
- jump(i4, 4, i5, 3)
+ jump(i4, 4, i5, 3, descr=targettoken)
'''
self.interpret(ops, [0, 0, 0, 0])
assert self.getints(4) == [1<<29, 30, 3, 4]
@@ -354,11 +363,12 @@
def test_result_selected_reg_via_neg(self):
ops = '''
[i0, i1, i2, i3]
+ label(i0, i1, i2, i3, descr=targettoken)
i6 = int_neg(i2)
i7 = int_add(1, i1)
i4 = int_lt(i7, 10)
guard_true(i4) [i0, i6, i7]
- jump(1, i7, i2, i6)
+ jump(1, i7, i2, i6, descr=targettoken)
'''
self.interpret(ops, [0, 0, 3, 0])
assert self.getints(3) == [1, -3, 10]
@@ -366,11 +376,12 @@
def test_compare_memory_result_survives(self):
ops = '''
[i0, i1, i2, i3]
+ label(i0, i1, i2, i3, descr=targettoken)
i4 = int_lt(i0, i1)
i5 = int_add(i3, 1)
i6 = int_lt(i5, 30)
guard_true(i6) [i4]
- jump(i0, i1, i4, i5)
+ jump(i0, i1, i4, i5, descr=targettoken)
'''
self.interpret(ops, [0, 10, 0, 0])
assert self.getint(0) == 1
@@ -378,10 +389,11 @@
def test_jump_different_args(self):
ops = '''
[i0, i15, i16, i18, i1, i2, i3]
+ label(i0, i15, i16, i18, i1, i2, i3, descr=targettoken)
i4 = int_add(i3, 1)
i5 = int_lt(i4, 20)
guard_true(i5) [i2, i1]
- jump(i0, i18, i15, i16, i2, i1, i4)
+ jump(i0, i18, i15, i16, i2, i1, i4, descr=targettoken)
'''
self.interpret(ops, [0, 1, 2, 3])
@@ -438,6 +450,7 @@
class TestRegallocMoreRegisters(BaseTestRegalloc):
cpu = BaseTestRegalloc.cpu
+ targettoken = TargetToken()
S = lltype.GcStruct('S', ('field', lltype.Char))
fielddescr = cpu.fielddescrof(S, 'field')
@@ -510,6 +523,7 @@
def test_division_optimized(self):
ops = '''
[i7, i6]
+ label(i7, i6, descr=targettoken)
i18 = int_floordiv(i7, i6)
i19 = int_xor(i7, i6)
i21 = int_lt(i19, 0)
@@ -517,7 +531,7 @@
i23 = int_is_true(i22)
i24 = int_eq(i6, 4)
guard_false(i24) [i18]
- jump(i18, i6)
+ jump(i18, i6, descr=targettoken)
'''
self.interpret(ops, [10, 4])
assert self.getint(0) == 2
@@ -588,7 +602,8 @@
'''
loop = self.interpret(ops, [4, 7, 9, 9 ,9, 9, 9, 9, 9, 9, 9])
assert self.getints(11) == [5, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9]
- assert loop.token._x86_param_depth == self.expected_param_depth(1)
+ clt = loop._jitcelltoken.compiled_loop_token
+ assert clt.param_depth == self.expected_param_depth(1)
def test_two_calls(self):
ops = '''
@@ -599,7 +614,8 @@
'''
loop = self.interpret(ops, [4, 7, 9, 9 ,9, 9, 9, 9, 9, 9, 9])
assert self.getints(11) == [5*7, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9]
- assert loop.token._x86_param_depth == self.expected_param_depth(2)
+ clt = loop._jitcelltoken.compiled_loop_token
+ assert clt.param_depth == self.expected_param_depth(2)
def test_call_many_arguments(self):
# NB: The first and last arguments in the call are constants. This
@@ -612,7 +628,8 @@
'''
loop = self.interpret(ops, [2, 3, 4, 5, 6, 7, 8, 9])
assert self.getint(0) == 55
- assert loop.token._x86_param_depth == self.expected_param_depth(10)
+ clt = loop._jitcelltoken.compiled_loop_token
+ assert clt.param_depth == self.expected_param_depth(10)
def test_bridge_calls_1(self):
ops = '''
diff --git a/pypy/jit/backend/x86/test/test_regalloc2.py b/pypy/jit/backend/x86/test/test_regalloc2.py
--- a/pypy/jit/backend/x86/test/test_regalloc2.py
+++ b/pypy/jit/backend/x86/test/test_regalloc2.py
@@ -1,6 +1,6 @@
import py
from pypy.jit.metainterp.history import ResOperation, BoxInt, ConstInt,\
- BoxPtr, ConstPtr, BasicFailDescr, LoopToken
+ BoxPtr, ConstPtr, BasicFailDescr, JitCellToken
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.backend.detect_cpu import getcpuclass
from pypy.jit.backend.x86.arch import WORD
@@ -20,7 +20,7 @@
]
cpu = CPU(None, None)
cpu.setup_once()
- looptoken = LoopToken()
+ looptoken = JitCellToken()
cpu.compile_loop(inputargs, operations, looptoken)
cpu.set_future_value_int(0, 9)
cpu.execute_token(looptoken)
@@ -43,7 +43,7 @@
]
cpu = CPU(None, None)
cpu.setup_once()
- looptoken = LoopToken()
+ looptoken = JitCellToken()
cpu.compile_loop(inputargs, operations, looptoken)
cpu.set_future_value_int(0, -10)
cpu.execute_token(looptoken)
@@ -140,7 +140,7 @@
]
cpu = CPU(None, None)
cpu.setup_once()
- looptoken = LoopToken()
+ looptoken = JitCellToken()
cpu.compile_loop(inputargs, operations, looptoken)
cpu.set_future_value_int(0, -13)
cpu.set_future_value_int(1, 10)
@@ -255,7 +255,7 @@
]
cpu = CPU(None, None)
cpu.setup_once()
- looptoken = LoopToken()
+ looptoken = JitCellToken()
cpu.compile_loop(inputargs, operations, looptoken)
cpu.set_future_value_int(0, 17)
cpu.set_future_value_int(1, -20)
diff --git a/pypy/jit/backend/x86/test/test_runner.py b/pypy/jit/backend/x86/test/test_runner.py
--- a/pypy/jit/backend/x86/test/test_runner.py
+++ b/pypy/jit/backend/x86/test/test_runner.py
@@ -1,9 +1,10 @@
import py
from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rstr, rclass
from pypy.rpython.annlowlevel import llhelper
-from pypy.jit.metainterp.history import ResOperation, LoopToken
+from pypy.jit.metainterp.history import ResOperation, TargetToken, JitCellToken
from pypy.jit.metainterp.history import (BoxInt, BoxPtr, ConstInt, ConstFloat,
- ConstPtr, Box, BoxFloat, BasicFailDescr)
+ ConstPtr, Box, BoxFloat,
+ BasicFailDescr)
from pypy.jit.backend.detect_cpu import getcpuclass
from pypy.jit.backend.x86.arch import WORD
from pypy.jit.backend.x86.rx86 import fits_in_32bits
@@ -279,7 +280,7 @@
descr=BasicFailDescr()),
]
ops[-2].setfailargs([i1])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([b], ops, looptoken)
if op == rop.INT_IS_TRUE:
self.cpu.set_future_value_int(0, b.value)
@@ -329,7 +330,7 @@
]
ops[-2].setfailargs([i1])
inputargs = [i for i in (a, b) if isinstance(i, Box)]
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop(inputargs, ops, looptoken)
for i, box in enumerate(inputargs):
self.cpu.set_future_value_int(i, box.value)
@@ -353,9 +354,10 @@
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
+ targettoken = TargetToken()
faildescr1 = BasicFailDescr(1)
faildescr2 = BasicFailDescr(2)
- looptoken = LoopToken()
+ looptoken = JitCellToken()
looptoken.number = 17
class FakeString(object):
def __init__(self, val):
@@ -365,14 +367,15 @@
return self.val
operations = [
+ ResOperation(rop.LABEL, [i0], None, descr=targettoken),
ResOperation(rop.DEBUG_MERGE_POINT, [FakeString("hello"), 0], None),
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=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
- operations[3].setfailargs([i1])
+ operations[-2].setfailargs([i1])
self.cpu.compile_loop(inputargs, operations, looptoken)
name, loopaddress, loopsize = agent.functions[0]
assert name == "Loop # 17: hello (loop counter 0)"
@@ -385,7 +388,7 @@
ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3),
ResOperation(rop.GUARD_TRUE, [i3], None, descr=faildescr2),
ResOperation(rop.DEBUG_MERGE_POINT, [FakeString("bye"), 0], None),
- ResOperation(rop.JUMP, [i1b], None, descr=looptoken),
+ ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
]
bridge[1].setfailargs([i1b])
@@ -408,11 +411,13 @@
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
- looptoken = LoopToken()
+ 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.JUMP, [i1], None, descr=looptoken),
+ ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
debug._log = dlog = debug.DebugLog()
@@ -496,7 +501,7 @@
ops[3].setfailargs([])
ops[5].setfailargs([])
ops[7].setfailargs([])
- looptoken = LoopToken()
+ looptoken = JitCellToken()
self.cpu.compile_loop([i1, i2], ops, looptoken)
self.cpu.set_future_value_int(0, 123450)
diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -723,9 +723,8 @@
# ____________________________________________________________
-# The TreeLoop class contains a loop or a generalized loop, i.e. a tree
-# of operations. Each branch ends in a jump which can go either to
-# the top of the same loop, or to another TreeLoop; or it ends in a FINISH.
+# The JitCellToken class is the root of a tree of traces. Each branch ends
+# in a jump which goes to a LABEL operation; or it ends in a FINISH.
class JitCellToken(AbstractDescr):
"""Used for rop.JUMP, giving the target of the jump.
@@ -766,7 +765,7 @@
self.compiled_loop_token.cpu.dump_loop_token(self)
class TargetToken(AbstractDescr):
- def __init__(self, targeting_jitcell_token):
+ def __init__(self, targeting_jitcell_token=None):
# The jitcell to which jumps might result in a jump to this label
self.targeting_jitcell_token = targeting_jitcell_token
diff --git a/pypy/jit/tool/oparser.py b/pypy/jit/tool/oparser.py
--- a/pypy/jit/tool/oparser.py
+++ b/pypy/jit/tool/oparser.py
@@ -241,9 +241,9 @@
if opnum == rop.FINISH:
if descr is None and self.invent_fail_descr:
descr = self.invent_fail_descr(self.model, fail_args)
- elif opnum == rop.JUMP:
- if descr is None and self.invent_fail_descr:
- descr = self.celltoken
+## elif opnum == rop.JUMP:
+## if descr is None and self.invent_fail_descr:
+## ...
return opnum, args, descr, fail_args
def create_op(self, opnum, args, result, descr):
More information about the pypy-commit
mailing list