Mercurial > lcfOS
annotate test/testgraph.py @ 295:917eab04b8b7
Added disasm
author | Windel Bouwman |
---|---|
date | Thu, 28 Nov 2013 21:10:32 +0100 |
parents | 7b38782ed496 |
children | 9417caea2eb3 |
rev | line source |
---|---|
277 | 1 #!/usr/bin/python |
2 | |
3 import unittest | |
4 import graph | |
279 | 5 import interferencegraph |
6 import flowgraph | |
7 import ir | |
280
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
8 from irmach import AbstractInstruction as AI |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
9 from target import Nop |
279 | 10 |
277 | 11 |
12 class GraphTestCase(unittest.TestCase): | |
13 def testEdge(self): | |
278
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
14 g = graph.Graph() |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
15 n1 = graph.Node(g) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
16 g.addNode(n1) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
17 n2 = graph.Node(g) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
18 g.addNode(n2) |
277 | 19 g.addEdge(n1, n2) |
20 self.assertTrue(g.hasEdge(n2, n1)) | |
21 self.assertTrue(g.hasEdge(n1, n2)) | |
22 g.delNode(n1) | |
23 g.delNode(n2) | |
24 | |
25 def testDegree(self): | |
278
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
26 g = graph.Graph() |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
27 n1 = graph.Node(g) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
28 g.addNode(n1) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
29 n2 = graph.Node(g) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
30 g.addNode(n2) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
31 n3 = graph.Node(g) |
9fca39eebe50
First implementation of regalloc with coalsesc
Windel Bouwman
parents:
277
diff
changeset
|
32 g.addNode(n3) |
277 | 33 g.addEdge(n1, n2) |
34 g.addEdge(n1, n3) | |
35 self.assertEqual(2, n1.Degree) | |
36 self.assertEqual(1, n2.Degree) | |
37 g.delNode(n2) | |
38 self.assertEqual(1, n1.Degree) | |
39 | |
279 | 40 |
277 | 41 class DigraphTestCase(unittest.TestCase): |
42 pass | |
290 | 43 |
277 | 44 |
279 | 45 class InterferenceGraphTestCase(unittest.TestCase): |
46 def testNormalUse(self): | |
47 t1 = ir.Temp('t1') | |
48 t2 = ir.Temp('t2') | |
49 t3 = ir.Temp('t3') | |
50 t4 = ir.Temp('t4') | |
51 t5 = ir.Temp('t5') | |
52 t6 = ir.Temp('t6') | |
53 instrs = [] | |
280
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
54 instrs.append(AI(Nop, dst=[t1])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
55 instrs.append(AI(Nop, dst=[t2])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
56 instrs.append(AI(Nop, dst=[t3])) |
279 | 57 cfg = flowgraph.FlowGraph(instrs) |
58 ig = interferencegraph.InterferenceGraph(cfg) | |
59 | |
60 def testCombine(self): | |
61 t1 = ir.Temp('t1') | |
62 t2 = ir.Temp('t2') | |
63 t3 = ir.Temp('t3') | |
64 t4 = ir.Temp('t4') | |
65 instrs = [] | |
280
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
66 instrs.append(AI(Nop, dst=[t1])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
67 instrs.append(AI(Nop, dst=[t2])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
68 instrs.append(AI(Nop, dst=[t3])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
69 instrs.append(AI(Nop, dst=[t4], src=[t3])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
70 instrs.append(AI(Nop, src=[t4])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
71 instrs.append(AI(Nop, src=[t1])) |
02385f62f250
Rework from str interface to Instruction interface
Windel Bouwman
parents:
279
diff
changeset
|
72 instrs.append(AI(Nop, src=[t2])) |
279 | 73 cfg = flowgraph.FlowGraph(instrs) |
74 ig = interferencegraph.InterferenceGraph(cfg) | |
75 ig.Combine(ig.getNode(t4), ig.getNode(t3)) | |
76 self.assertIs(ig.getNode(t4), ig.getNode(t3)) | |
77 | |
78 | |
277 | 79 if __name__ == '__main__': |
80 unittest.main() |