[pypy-commit] pypy regalloc-playground: move tests for force_result_in_regs to their own class, since there are so
cfbolz
pypy.commits at gmail.com
Thu Aug 24 05:57:06 EDT 2017
Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: regalloc-playground
Changeset: r92247:52e02755ad6a
Date: 2017-08-24 11:08 +0200
http://bitbucket.org/pypy/pypy/changeset/52e02755ad6a/
Log: move tests for force_result_in_regs to their own class, since there
are so many cases (and I am about to add more)
diff --git a/rpython/jit/backend/llsupport/test/test_regalloc.py b/rpython/jit/backend/llsupport/test/test_regalloc.py
--- a/rpython/jit/backend/llsupport/test/test_regalloc.py
+++ b/rpython/jit/backend/llsupport/test/test_regalloc.py
@@ -507,72 +507,6 @@
assert isinstance(loc, FakeReg)
rm._check_invariants()
- def test_force_result_in_reg_1(self):
- b0, b1 = newboxes(0, 0)
- longevity = {b0: Lifetime(0, 1), b1: Lifetime(1, 3)}
- fm = TFrameManager()
- asm = MockAsm()
- rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
- rm.next_instruction()
- # first path, var is already in reg and dies
- loc0 = rm.force_allocate_reg(b0)
- rm._check_invariants()
- rm.next_instruction()
- loc = rm.force_result_in_reg(b1, b0)
- assert loc is loc0
- assert len(asm.moves) == 0
- rm._check_invariants()
-
- def test_force_result_in_reg_2(self):
- b0, b1 = newboxes(0, 0)
- longevity = {b0: Lifetime(0, 2), b1: Lifetime(1, 3)}
- fm = TFrameManager()
- asm = MockAsm()
- rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
- rm.next_instruction()
- loc0 = rm.force_allocate_reg(b0)
- rm._check_invariants()
- rm.next_instruction()
- loc = rm.force_result_in_reg(b1, b0)
- assert loc is loc0
- assert rm.loc(b0) is not loc0
- assert len(asm.moves) == 1
- rm._check_invariants()
-
- def test_force_result_in_reg_3(self):
- b0, b1, b2, b3, b4 = newboxes(0, 0, 0, 0, 0)
- longevity = {b0: Lifetime(0, 2), b1: Lifetime(0, 2),
- b3: Lifetime(0, 2), b2: Lifetime(0, 2),
- b4: Lifetime(1, 3)}
- fm = TFrameManager()
- asm = MockAsm()
- rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
- rm.next_instruction()
- for b in b0, b1, b2, b3:
- rm.force_allocate_reg(b)
- assert not len(rm.free_regs)
- rm._check_invariants()
- rm.next_instruction()
- rm.force_result_in_reg(b4, b0)
- rm._check_invariants()
- assert len(asm.moves) == 1
-
- def test_force_result_in_reg_4(self):
- b0, b1 = newboxes(0, 0)
- longevity = {b0: Lifetime(0, 1), b1: Lifetime(0, 1)}
- fm = TFrameManager()
- asm = MockAsm()
- rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
- rm.next_instruction()
- fm.loc(b0)
- rm.force_result_in_reg(b1, b0)
- rm._check_invariants()
- loc = rm.loc(b1)
- assert isinstance(loc, FakeReg)
- loc = rm.loc(b0)
- assert isinstance(loc, FakeFramePos)
- assert len(asm.moves) == 1
-
def test_bogus_make_sure_var_in_reg(self):
b0, = newboxes(0)
longevity = {b0: Lifetime(0, 1)}
@@ -602,17 +536,6 @@
assert len(rm.reg_bindings) == 4
rm._check_invariants()
- def test_force_result_in_reg_const(self):
- boxes, longevity = boxes_and_longevity(2)
- fm = TFrameManager()
- asm = MockAsm()
- rm = RegisterManager(longevity, frame_manager=fm,
- assembler=asm)
- rm.next_instruction()
- c = ConstInt(0)
- rm.force_result_in_reg(boxes[0], c)
- rm._check_invariants()
-
def test_loc_of_const(self):
rm = RegisterManager({})
rm.next_instruction()
@@ -935,6 +858,87 @@
for box in fm.bindings.keys():
fm.mark_as_free(box)
+
+class TestForceResultInReg(object):
+ # use it's own class since there are so many cases
+
+ def test_force_result_in_reg_1(self):
+ b0, b1 = newboxes(0, 0)
+ longevity = {b0: Lifetime(0, 1), b1: Lifetime(1, 3)}
+ fm = TFrameManager()
+ asm = MockAsm()
+ rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
+ rm.next_instruction()
+ # first path, var is already in reg and dies
+ loc0 = rm.force_allocate_reg(b0)
+ rm._check_invariants()
+ rm.next_instruction()
+ loc = rm.force_result_in_reg(b1, b0)
+ assert loc is loc0
+ assert len(asm.moves) == 0
+ rm._check_invariants()
+
+ def test_force_result_in_reg_2(self):
+ b0, b1 = newboxes(0, 0)
+ longevity = {b0: Lifetime(0, 2), b1: Lifetime(1, 3)}
+ fm = TFrameManager()
+ asm = MockAsm()
+ rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
+ rm.next_instruction()
+ loc0 = rm.force_allocate_reg(b0)
+ rm._check_invariants()
+ rm.next_instruction()
+ loc = rm.force_result_in_reg(b1, b0)
+ assert loc is loc0
+ assert rm.loc(b0) is not loc0
+ assert len(asm.moves) == 1
+ rm._check_invariants()
+
+ def test_force_result_in_reg_3(self):
+ b0, b1, b2, b3, b4 = newboxes(0, 0, 0, 0, 0)
+ longevity = {b0: Lifetime(0, 2), b1: Lifetime(0, 2),
+ b3: Lifetime(0, 2), b2: Lifetime(0, 2),
+ b4: Lifetime(1, 3)}
+ fm = TFrameManager()
+ asm = MockAsm()
+ rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
+ rm.next_instruction()
+ for b in b0, b1, b2, b3:
+ rm.force_allocate_reg(b)
+ assert not len(rm.free_regs)
+ rm._check_invariants()
+ rm.next_instruction()
+ rm.force_result_in_reg(b4, b0)
+ rm._check_invariants()
+ assert len(asm.moves) == 1
+
+ def test_force_result_in_reg_4(self):
+ b0, b1 = newboxes(0, 0)
+ longevity = {b0: Lifetime(0, 1), b1: Lifetime(0, 1)}
+ fm = TFrameManager()
+ asm = MockAsm()
+ rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
+ rm.next_instruction()
+ fm.loc(b0)
+ rm.force_result_in_reg(b1, b0)
+ rm._check_invariants()
+ loc = rm.loc(b1)
+ assert isinstance(loc, FakeReg)
+ loc = rm.loc(b0)
+ assert isinstance(loc, FakeFramePos)
+ assert len(asm.moves) == 1
+
+ def test_force_result_in_reg_const(self):
+ boxes, longevity = boxes_and_longevity(2)
+ fm = TFrameManager()
+ asm = MockAsm()
+ rm = RegisterManager(longevity, frame_manager=fm,
+ assembler=asm)
+ rm.next_instruction()
+ c = ConstInt(0)
+ rm.force_result_in_reg(boxes[0], c)
+ rm._check_invariants()
+
# _____________________________________________________
# tests that assign registers in a mocked way for a fake CPU
@@ -1243,7 +1247,6 @@
]
def test_coalescing_first_var_already_in_different_reg(self):
- py.test.skip("messy - later")
ops = '''
[i0]
i2 = int_mul(i0, 2)
More information about the pypy-commit
mailing list