[pypy-commit] pypy guard-compatible: Fix test_extend_guard_compatible_2 (missing llgraph caching) and add
arigo
pypy.commits at gmail.com
Fri May 20 11:14:59 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch: guard-compatible
Changeset: r84527:4f4676f68148
Date: 2016-05-20 17:15 +0200
http://bitbucket.org/pypy/pypy/changeset/4f4676f68148/
Log: Fix test_extend_guard_compatible_2 (missing llgraph caching) and add
test_extend_guard_compatible_3
diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -263,7 +263,65 @@
assert fail.identifier == 2
else:
assert fail.identifier == 1
- expected.append(t)
+ if t not in expected:
+ expected.append(t)
+ assert seen == expected
+
+ def test_extend_guard_compatible_3(self):
+ seen = []
+ def find_compatible(cpu, arg):
+ assert cpu is self.cpu
+ if arg == t2_box._resref:
+ return asminfo43.asmaddr
+ if arg == t3_box._resref:
+ return asminfo44.asmaddr
+ raise AssertionError
+ t1_box, T1_box, d1 = self.alloc_instance(self.T)
+ t2_box, T2_box, d2 = self.alloc_instance(self.T)
+ t3_box, T3_box, d3 = self.alloc_instance(self.T)
+ faildescr1 = BasicFailDescr(1)
+ faildescr1.find_compatible = find_compatible
+ loop = parse("""
+ [p0]
+ guard_compatible(p0, ConstPtr(t1), descr=faildescr1) []
+ finish(p0, descr=fdescr)
+ """, namespace={'fdescr': BasicFinalDescr(2),
+ 'faildescr1': faildescr1,
+ 't1': t1_box._resref})
+ looptoken = JitCellToken()
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+
+ bridge43 = parse("""
+ []
+ finish(p0, descr=fdescr43)
+ """, namespace={'fdescr43': BasicFinalDescr(43)})
+ asminfo43 = self.cpu.compile_bridge(faildescr1, bridge43.inputargs,
+ bridge43.operations, looptoken)
+
+ bridge44 = parse("""
+ []
+ finish(p0, descr=fdescr44)
+ """, namespace={'fdescr44': BasicFinalDescr(44)})
+ asminfo44 = self.cpu.compile_bridge(faildescr1, bridge44.inputargs,
+ bridge44.operations, looptoken)
+
+ assert seen == []
+
+ t_list = [t1_box._resref, t2_box._resref, t3_box._resref]
+ expected = []
+ for t in t_list * 2:
+ # find_compatible() returns a bridge's address: switch goes there
+ deadframe = self.cpu.execute_token(looptoken, t)
+ fail = self.cpu.get_latest_descr(deadframe)
+ if t == t1_box._resref:
+ assert fail.identifier == 2
+ else:
+ if t == t2_box._resref:
+ assert fail.identifier == 43
+ else:
+ assert fail.identifier == 44
+ if t not in expected:
+ expected.append(t)
assert seen == expected
def test_compile_with_holes_in_fail_args(self):
More information about the pypy-commit
mailing list