Mercurial > lcfOS
view python/testgraph.py @ 279:2ccd57b1d78c
Fix register allocator to do burn2 OK
author | Windel Bouwman |
---|---|
date | Sat, 12 Oct 2013 09:56:23 +0200 |
parents | 9fca39eebe50 |
children | 02385f62f250 |
line wrap: on
line source
#!/usr/bin/python import unittest import graph import interferencegraph import flowgraph import ir import irmach class GraphTestCase(unittest.TestCase): def testEdge(self): g = graph.Graph() n1 = graph.Node(g) g.addNode(n1) n2 = graph.Node(g) g.addNode(n2) g.addEdge(n1, n2) self.assertTrue(g.hasEdge(n2, n1)) self.assertTrue(g.hasEdge(n1, n2)) g.delNode(n1) g.delNode(n2) def testDegree(self): g = graph.Graph() n1 = graph.Node(g) g.addNode(n1) n2 = graph.Node(g) g.addNode(n2) n3 = graph.Node(g) g.addNode(n3) g.addEdge(n1, n2) g.addEdge(n1, n3) self.assertEqual(2, n1.Degree) self.assertEqual(1, n2.Degree) g.delNode(n2) self.assertEqual(1, n1.Degree) class DigraphTestCase(unittest.TestCase): pass class InterferenceGraphTestCase(unittest.TestCase): def testNormalUse(self): t1 = ir.Temp('t1') t2 = ir.Temp('t2') t3 = ir.Temp('t3') t4 = ir.Temp('t4') t5 = ir.Temp('t5') t6 = ir.Temp('t6') instrs = [] instrs.append(irmach.makeIns('ld %d', dst=[t1])) instrs.append(irmach.makeIns('ld %d', dst=[t2])) instrs.append(irmach.makeIns('ld %d', dst=[t3])) cfg = flowgraph.FlowGraph(instrs) ig = interferencegraph.InterferenceGraph(cfg) def testCombine(self): t1 = ir.Temp('t1') t2 = ir.Temp('t2') t3 = ir.Temp('t3') t4 = ir.Temp('t4') instrs = [] instrs.append(irmach.makeIns('ld %d0', dst=[t1])) instrs.append(irmach.makeIns('ld %d0', dst=[t2])) instrs.append(irmach.makeIns('ld %d0', dst=[t3])) instrs.append(irmach.makeIns('mov %d0, %s0', dst=[t4], src=[t3])) instrs.append(irmach.makeIns('st %s0', src=[t4])) instrs.append(irmach.makeIns('st %s0', src=[t1])) instrs.append(irmach.makeIns('st %s0', src=[t2])) cfg = flowgraph.FlowGraph(instrs) ig = interferencegraph.InterferenceGraph(cfg) ig.to_txt() ig.Combine(ig.getNode(t4), ig.getNode(t3)) self.assertIs(ig.getNode(t4), ig.getNode(t3)) print('after') ig.to_txt() if __name__ == '__main__': unittest.main()