|
@@ -1,6 +1,6 @@
|
|
|
import unittest
|
|
import unittest
|
|
|
|
|
|
|
|
-from src.optimize.redundancies import remove_redundancies, \
|
|
|
|
|
|
|
+from src.optimize_redundancies import remove_redundancies, \
|
|
|
remove_redundant_jumps, remove_redundant_branch_jumps
|
|
remove_redundant_jumps, remove_redundant_branch_jumps
|
|
|
from src.program import Program
|
|
from src.program import Program
|
|
|
from src.statement import Statement as S, Block as B
|
|
from src.statement import Statement as S, Block as B
|
|
@@ -12,7 +12,7 @@ def optimize_block(block):
|
|
|
|
|
|
|
|
# program.blocks = [block]
|
|
# program.blocks = [block]
|
|
|
# del program.statements
|
|
# del program.statements
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
# program.optimize_blocks()
|
|
# program.optimize_blocks()
|
|
|
|
|
|
|
|
remove_redundancies(block)
|
|
remove_redundancies(block)
|
|
@@ -173,7 +173,7 @@ class TestOptimize(unittest.TestCase):
|
|
|
self.assertEquals(block.statements, arguments)
|
|
self.assertEquals(block.statements, arguments)
|
|
|
self.assertEquals(block2.statements, arguments2)
|
|
self.assertEquals(block2.statements, arguments2)
|
|
|
self.assertEquals(block3.statements, arguments3)
|
|
self.assertEquals(block3.statements, arguments3)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
def test_optimize_block_move_move_true(self):
|
|
def test_optimize_block_move_move_true(self):
|
|
|
block = B([self.foo,
|
|
block = B([self.foo,
|
|
|
S('command', 'move', '$regA', '$regB'),
|
|
S('command', 'move', '$regA', '$regB'),
|
|
@@ -194,30 +194,30 @@ class TestOptimize(unittest.TestCase):
|
|
|
remove_redundancies(block)
|
|
remove_redundancies(block)
|
|
|
|
|
|
|
|
self.assertEquals(block.statements, arguments)
|
|
self.assertEquals(block.statements, arguments)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
def test_remove_redundant_jumps_true(self):
|
|
def test_remove_redundant_jumps_true(self):
|
|
|
block = B([self.foo,
|
|
block = B([self.foo,
|
|
|
S('command', 'j', '$L1'),
|
|
S('command', 'j', '$L1'),
|
|
|
S('label', '$L1'),
|
|
S('label', '$L1'),
|
|
|
self.bar])
|
|
self.bar])
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
remove_redundant_jumps(block)
|
|
remove_redundant_jumps(block)
|
|
|
-
|
|
|
|
|
- self.assertEqual(block.statements, [self.foo,
|
|
|
|
|
|
|
+
|
|
|
|
|
+ self.assertEqual(block.statements, [self.foo,
|
|
|
S('label', '$L1'),
|
|
S('label', '$L1'),
|
|
|
self.bar])
|
|
self.bar])
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
def test_remove_redundant_jumps_false(self):
|
|
def test_remove_redundant_jumps_false(self):
|
|
|
arguments = [self.foo,
|
|
arguments = [self.foo,
|
|
|
S('command', 'j', '$L1'),
|
|
S('command', 'j', '$L1'),
|
|
|
S('label', '$L2'),
|
|
S('label', '$L2'),
|
|
|
self.bar]
|
|
self.bar]
|
|
|
block = B(arguments)
|
|
block = B(arguments)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
remove_redundant_jumps(block)
|
|
remove_redundant_jumps(block)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
self.assertEqual(block.statements, arguments)
|
|
self.assertEqual(block.statements, arguments)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
def test_remove_redundant_branch_jumps_beq_j_true(self):
|
|
def test_remove_redundant_branch_jumps_beq_j_true(self):
|
|
|
block = B([self.foo,
|
|
block = B([self.foo,
|
|
|
S('command', 'beq', '$regA', '$regB', '$Lx'),
|
|
S('command', 'beq', '$regA', '$regB', '$Lx'),
|