Commit c53c99a7 authored by Taddeus Kroes's avatar Taddeus Kroes

Fixed unit tests without dummy block.

parent 968c47b8
...@@ -41,12 +41,12 @@ class TestLiveness(unittest.TestCase): ...@@ -41,12 +41,12 @@ class TestLiveness(unittest.TestCase):
s33 = S('command', 'mult', 'b', 'd') s33 = S('command', 'mult', 'b', 'd')
s34 = S('command', 'mflo', 'temp') s34 = S('command', 'mflo', 'temp')
s35 = S('command', 'addu', 'return', 'temp', 'c') s35 = S('command', 'addu', 'return', 'temp', 'c')
b1, b2, b3, b4 = find_basic_blocks([s11, s12, s13, s14, s15, s21, s22, \ b1, b2, b3 = find_basic_blocks([s11, s12, s13, s14, s15, s21, s22,
s31, s32, s33, s34, s35]) s31, s32, s33, s34, s35])
generate_flow_graph([b1, b2, b3, b4]) generate_flow_graph([b1, b2, b3])
create_in_out([b1, b2, b3, b4]) create_in_out([b1, b2, b3])
self.assertEqual(b1.use_set, set()) self.assertEqual(b1.use_set, set())
self.assertEqual(b1.def_set, set(['a', 'b', 'd', 'x'])) self.assertEqual(b1.def_set, set(['a', 'b', 'd', 'x']))
...@@ -57,51 +57,51 @@ class TestLiveness(unittest.TestCase): ...@@ -57,51 +57,51 @@ class TestLiveness(unittest.TestCase):
self.assertEqual(b3.use_set, set(['b', 'd'])) self.assertEqual(b3.use_set, set(['b', 'd']))
self.assertEqual(b3.def_set, set(['c', 'temp', 'return'])) self.assertEqual(b3.def_set, set(['c', 'temp', 'return']))
self.assertEqual(b1.live_in, set(['$4', '$5', '$6', '$7'])) self.assertEqual(b1.live_in, set())
self.assertEqual(b1.live_out, set(['a', 'b', 'd', '$4', '$5', '$6', '$7'])) self.assertEqual(b1.live_out, set(['a', 'b', 'd']))
self.assertEqual(b2.live_in, set(['a', 'b', '$4', '$5', '$6', '$7'])) self.assertEqual(b2.live_in, set(['a', 'b']))
self.assertEqual(b2.live_out, set(['b', 'd', '$4', '$5', '$6', '$7'])) self.assertEqual(b2.live_out, set(['b', 'd']))
self.assertEqual(b3.live_in, set(['b', 'd', '$4', '$5', '$6', '$7'])) self.assertEqual(b3.live_in, set(['b', 'd']))
self.assertEqual(b3.live_out, set(['$4', '$5', '$6', '$7'])) self.assertEqual(b3.live_out, set())
# def test_create_in_out_two(self): # def test_create_in_out_two(self):
# s11 = S('command', 'subu', 'i', 'm', '0x00000001') # s11 = S('command', 'subu', 'i', 'm', '0x00000001')
# s12 = S('command', 'move', 'j', 'n') # s12 = S('command', 'move', 'j', 'n')
# s13 = S('command', 'move', 'a', 'u1') # s13 = S('command', 'move', 'a', 'u1')
# s14 = S('command', 'subu', 'i', 'm', '0x00000005') # s14 = S('command', 'subu', 'i', 'm', '0x00000005')
# s15 = S('command', 'j', 'L1') # s15 = S('command', 'j', 'L1')
# #
# s21 = S('label', 'L1') # s21 = S('label', 'L1')
# s22 = S('command', 'addi', 'i', '0x00000001') # s22 = S('command', 'addi', 'i', '0x00000001')
# s23 = S('command', 'subi', 'j', '0x00000002') # s23 = S('command', 'subi', 'j', '0x00000002')
# s24 = S('command', 'bne', 'i', 'j', 'L2') # s24 = S('command', 'bne', 'i', 'j', 'L2')
# #
# s31 = S('command', 'move', 'a', 'u2') # s31 = S('command', 'move', 'a', 'u2')
# s32 = S('command', 'j', 'L1') # s32 = S('command', 'j', 'L1')
# s41 = S('label', 'L2') # s41 = S('label', 'L2')
# s42 = S('command', 'move', 'i', 'u3') # s42 = S('command', 'move', 'i', 'u3')
# s43 = S('command', 'beq', 'i', 'j', 'L3') # s43 = S('command', 'beq', 'i', 'j', 'L3')
# #
# s51 = S('label', 'L3') # s51 = S('label', 'L3')
# s52 = S('command', 'addu', 'b', 'i', 'a') # s52 = S('command', 'addu', 'b', 'i', 'a')
# #
# blocks = find_basic_blocks([s11, s12, s13, s14, s15, # blocks = find_basic_blocks([s11, s12, s13, s14, s15,
# s21, s22, s23, s24, s31, s32, s41, s42, s43, s51, s52]) # s21, s22, s23, s24, s31, s32, s41, s42, s43, s51, s52])
# #
# generate_flow_graph(blocks) # generate_flow_graph(blocks)
# create_in_out(blocks) # create_in_out(blocks)
# #
# for i, block in enumerate(blocks): # for i, block in enumerate(blocks):
# print 'block ', i,':\n\t in:', block.live_in # print 'block ', i,':\n\t in:', block.live_in
# print '\t out:', block.live_out # print '\t out:', block.live_out
# #
# #print blocks[-1].live_in # #print blocks[-1].live_in
...@@ -2,7 +2,7 @@ import unittest ...@@ -2,7 +2,7 @@ import unittest
from copy import copy from copy import copy
from src.optimize.advanced import eliminate_common_subexpressions, \ from src.optimize.advanced import eliminate_common_subexpressions, \
fold_constants, copy_propagation, algebraic_transformations fold_constants, copy_propagation
from src.statement import Statement as S from src.statement import Statement as S
from src.dataflow import BasicBlock as B, generate_flow_graph from src.dataflow import BasicBlock as B, generate_flow_graph
import src.liveness as liveness import src.liveness as liveness
...@@ -104,93 +104,93 @@ class TestOptimizeAdvanced(unittest.TestCase): ...@@ -104,93 +104,93 @@ class TestOptimizeAdvanced(unittest.TestCase):
self.assertFalse(copy_propagation(block)) self.assertFalse(copy_propagation(block))
self.assertEqual(block.statements, arguments) self.assertEqual(block.statements, arguments)
def test_algebraic_transforms_add0(self): #def test_algebraic_transforms_add0(self):
block = B([self.foo, # block = B([self.foo,
S('command', 'addu', '$1', '$2', 0), # S('command', 'addu', '$1', '$2', 0),
self.bar]) # self.bar])
self.assertTrue(algebraic_transformations(block)) # self.assertTrue(algebraic_transformations(block))
self.assertEqual(block.statements, [self.foo, # self.assertEqual(block.statements, [self.foo,
S('command', 'move', '$1', '$2'), # S('command', 'move', '$1', '$2'),
self.bar]) # self.bar])
def test_algebraic_transforms_add1(self): #def test_algebraic_transforms_add1(self):
arguments = [self.foo, # arguments = [self.foo,
S('command', 'addu', '$1', '$2', 1), # S('command', 'addu', '$1', '$2', 1),
self.bar] # self.bar]
block = B(arguments) # block = B(arguments)
self.assertFalse(algebraic_transformations(block)) # self.assertFalse(algebraic_transformations(block))
self.assertEqual(block.statements, arguments) # self.assertEqual(block.statements, arguments)
def test_algebraic_transforms_sub0(self): #def test_algebraic_transforms_sub0(self):
block = B([self.foo, # block = B([self.foo,
S('command', 'subu', '$1', '$2', 0), # S('command', 'subu', '$1', '$2', 0),
self.bar]) # self.bar])
self.assertTrue(algebraic_transformations(block)) # self.assertTrue(algebraic_transformations(block))
self.assertEqual(block.statements, [self.foo, # self.assertEqual(block.statements, [self.foo,
S('command', 'move', '$1', '$2'), # S('command', 'move', '$1', '$2'),
self.bar]) # self.bar])
def test_algebraic_transforms_sub1(self): #def test_algebraic_transforms_sub1(self):
arguments = [self.foo, # arguments = [self.foo,
S('command', 'subu', '$1', '$2', 1), # S('command', 'subu', '$1', '$2', 1),
self.bar] # self.bar]
block = B(arguments) # block = B(arguments)
self.assertFalse(algebraic_transformations(block)) # self.assertFalse(algebraic_transformations(block))
self.assertEqual(block.statements, arguments) # self.assertEqual(block.statements, arguments)
def test_algebraic_transforms_mult0(self): #def test_algebraic_transforms_mult0(self):
block = B([self.foo, # block = B([self.foo,
S('command', 'mult', '$2', 0), # S('command', 'mult', '$2', 0),
S('command', 'mflo', '$1'), # S('command', 'mflo', '$1'),
self.bar]) # self.bar])
self.assertTrue(algebraic_transformations(block)) # self.assertTrue(algebraic_transformations(block))
self.assertEqual(block.statements, [self.foo, # self.assertEqual(block.statements, [self.foo,
S('command', 'li', '$1', '0x00000000'), # S('command', 'li', '$1', '0x00000000'),
self.bar]) # self.bar])
def test_algebraic_transforms_mult1(self): #def test_algebraic_transforms_mult1(self):
block = B([self.foo, # block = B([self.foo,
S('command', 'mult', '$2', 1), # S('command', 'mult', '$2', 1),
S('command', 'mflo', '$1'), # S('command', 'mflo', '$1'),
self.bar]) # self.bar])
self.assertTrue(algebraic_transformations(block)) # self.assertTrue(algebraic_transformations(block))
self.assertEqual(block.statements, [self.foo, # self.assertEqual(block.statements, [self.foo,
S('command', 'move', '$1', '$2'), # S('command', 'move', '$1', '$2'),
self.bar]) # self.bar])
def test_algebraic_transforms_mult2(self): #def test_algebraic_transforms_mult2(self):
block = B([self.foo, # block = B([self.foo,
S('command', 'mult', '$2', 2), # S('command', 'mult', '$2', 2),
S('command', 'mflo', '$1'), # S('command', 'mflo', '$1'),
self.bar]) # self.bar])
self.assertTrue(algebraic_transformations(block)) # self.assertTrue(algebraic_transformations(block))
self.assertEqual(block.statements, [self.foo, # self.assertEqual(block.statements, [self.foo,
S('command', 'sll', '$1', '$2', 1), # S('command', 'sll', '$1', '$2', 1),
self.bar]) # self.bar])
def test_algebraic_transforms_mult16(self): #def test_algebraic_transforms_mult16(self):
block = B([self.foo, # block = B([self.foo,
S('command', 'mult', '$2', 16), # S('command', 'mult', '$2', 16),
S('command', 'mflo', '$1'), # S('command', 'mflo', '$1'),
self.bar]) # self.bar])
self.assertTrue(algebraic_transformations(block)) # self.assertTrue(algebraic_transformations(block))
self.assertEqual(block.statements, [self.foo, # self.assertEqual(block.statements, [self.foo,
S('command', 'sll', '$1', '$2', 4), # S('command', 'sll', '$1', '$2', 4),
self.bar]) # self.bar])
def test_algebraic_transforms_mult3(self): #def test_algebraic_transforms_mult3(self):
arguments = [self.foo, # arguments = [self.foo,
S('command', 'mult', '$2', 3), # S('command', 'mult', '$2', 3),
S('command', 'mflo', '$1'), # S('command', 'mflo', '$1'),
self.bar] # self.bar]
block = B(arguments) # block = B(arguments)
self.assertFalse(algebraic_transformations(block)) # self.assertFalse(algebraic_transformations(block))
self.assertEqual(block.statements, arguments) # self.assertEqual(block.statements, arguments)
...@@ -55,11 +55,11 @@ class TestReachingDefinitions(unittest.TestCase): ...@@ -55,11 +55,11 @@ class TestReachingDefinitions(unittest.TestCase):
s34 = S('command', 'mflo', 'temp') s34 = S('command', 'mflo', 'temp')
s35 = S('command', 'addu', 'return', 'temp', 'c') s35 = S('command', 'addu', 'return', 'temp', 'c')
b1, b2, b3, b4 = find_basic_blocks([s11, s12, s13, s14, s15, s21, s22, \ b1, b2, b3 = find_basic_blocks([s11, s12, s13, s14, s15, s21, s22, \
s31, s32, s33, s34, s35]) s31, s32, s33, s34, s35])
generate_flow_graph([b1, b2, b3, b4]) generate_flow_graph([b1, b2, b3])
create_in_out([b1, b2, b3, b4]) create_in_out([b1, b2, b3])
self.assertEqual(b1.gen_set, set([s11.sid, s12.sid, s13.sid, self.assertEqual(b1.gen_set, set([s11.sid, s12.sid, s13.sid,
s14.sid])) s14.sid]))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment