annotate test/testregalloc.py @ 308:2e7f55319858

Merged analyse into codegenerator
author Windel Bouwman
date Fri, 13 Dec 2013 11:53:29 +0100
parents 6753763d3bec
children 86b02c98a717
rev   line source
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
1 import unittest
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
2 import os
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
3 import sys
301
6753763d3bec merge codegen into ppci package
Windel Bouwman
parents: 299
diff changeset
4 from ppci.irmach import makeIns, Frame
6753763d3bec merge codegen into ppci package
Windel Bouwman
parents: 299
diff changeset
5 from ppci.codegen.registerallocator import RegisterAllocator
6753763d3bec merge codegen into ppci package
Windel Bouwman
parents: 299
diff changeset
6 from ppci import ir
280
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
7 from target import Nop
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
8
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
9
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
10 class RegAllocTestCase(unittest.TestCase):
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
11 def setUp(self):
296
9417caea2eb3 Directorized some backend files
Windel Bouwman
parents: 284
diff changeset
12 self.ra = RegisterAllocator()
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
13
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
14 def testRegAlloc(self):
280
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
15 f = Frame('tst')
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
16 f.regs = [1,2,3,4,5,6] # for test use numbers!
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
17 f.tempMap = {}
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
18 t1 = ir.Temp('t1')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
19 t2 = ir.Temp('t2')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
20 t3 = ir.Temp('t3')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
21 t4 = ir.Temp('t4')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
22 t5 = ir.Temp('t5')
280
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
23 f.instructions.append(makeIns(Nop, dst=[t1]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
24 f.instructions.append(makeIns(Nop, dst=[t2]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
25 f.instructions.append(makeIns(Nop, dst=[t3]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
26 f.instructions.append(makeIns(Nop, dst=[t4], src=[t1, t2]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
27 f.instructions.append(makeIns(Nop, dst=[t5], src=[t4, t3]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
28 f.instructions.append(makeIns(Nop, src=[t5]))
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
29 self.ra.allocFrame(f)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
30 self.conflict(t1, t2)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
31 self.conflict(t2, t3)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
32
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
33 def conflict(self, ta, tb):
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
34 self.assertNotEqual(self.ra.Node(ta).color, self.ra.Node(tb).color)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
35
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
36 def testRegCoalesc(self):
280
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
37 f = Frame('tst')
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
38 f.regs = [1,2,3,4,5,6] # for test use numbers!
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
39 f.tempMap = {}
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
40 t1 = ir.Temp('t1')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
41 t2 = ir.Temp('t2')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
42 t3 = ir.Temp('t3')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
43 t4 = ir.Temp('t4')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
44 t5 = ir.Temp('t5')
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
45 t6 = ir.Temp('t6')
280
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
46 f.instructions.append(makeIns(Nop, dst=[t1]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
47 f.instructions.append(makeIns(Nop, dst=[t2]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
48 f.instructions.append(makeIns(Nop, dst=[t3]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
49 f.instructions.append(makeIns(Nop, dst=[t4], src=[t2, t1]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
50 f.instructions.append(makeIns(Nop, dst=[t5], src=[t3]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
51 f.instructions.append(makeIns(Nop, dst=[t5], src=[t4, t5]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
52 f.instructions.append(makeIns(Nop, dst=[t6], src=[t5]))
02385f62f250 Rework from str interface to Instruction interface
Windel Bouwman
parents: 279
diff changeset
53 f.instructions.append(makeIns(Nop, src=[t6]))
279
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
54 self.ra.allocFrame(f)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
55 self.conflict(t1, t2)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
56 self.conflict(t2, t3)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
57 self.conflict(t1, t3)
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
58
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
59 if __name__ == '__main__':
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
60 unittest.main()
2ccd57b1d78c Fix register allocator to do burn2 OK
Windel Bouwman
parents:
diff changeset
61