|
@@ -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
|
|
|
|
|
|
|
+ fold_constants, propagate_copies
|
|
|
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
|
|
@@ -40,49 +40,49 @@ class TestOptimizeAdvanced(unittest.TestCase):
|
|
|
def test_fold_constants(self):
|
|
def test_fold_constants(self):
|
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
- #def test_copy_propagation_true(self):
|
|
|
|
|
|
|
+ #def test_propagate_copies_true(self):
|
|
|
# block = B([self.foo,
|
|
# block = B([self.foo,
|
|
|
# S('command', 'move', '$1', '$2'),
|
|
# S('command', 'move', '$1', '$2'),
|
|
|
# self.foo,
|
|
# self.foo,
|
|
|
# S('command', 'addu', '$3', '$1', '$4'),
|
|
# S('command', 'addu', '$3', '$1', '$4'),
|
|
|
# self.bar])
|
|
# self.bar])
|
|
|
|
|
|
|
|
- # self.assertTrue(copy_propagation(block))
|
|
|
|
|
|
|
+ # self.assertTrue(propagate_copies(block))
|
|
|
# self.assertEqual(block.statements, [self.foo,
|
|
# self.assertEqual(block.statements, [self.foo,
|
|
|
# S('command', 'move', '$1', '$2'),
|
|
# S('command', 'move', '$1', '$2'),
|
|
|
# self.foo,
|
|
# self.foo,
|
|
|
# S('command', 'addu', '$3', '$2', '$4'),
|
|
# S('command', 'addu', '$3', '$2', '$4'),
|
|
|
# self.bar])
|
|
# self.bar])
|
|
|
|
|
|
|
|
- def test_copy_propagation_other_arg(self):
|
|
|
|
|
|
|
+ def test_propagate_copies_other_arg(self):
|
|
|
block = B([self.foo,
|
|
block = B([self.foo,
|
|
|
S('command', 'move', '$1', '$2'),
|
|
S('command', 'move', '$1', '$2'),
|
|
|
self.foo,
|
|
self.foo,
|
|
|
S('command', 'addu', '$3', '$4', '$1'),
|
|
S('command', 'addu', '$3', '$4', '$1'),
|
|
|
self.bar])
|
|
self.bar])
|
|
|
|
|
|
|
|
- self.assertTrue(copy_propagation(block))
|
|
|
|
|
|
|
+ self.assertTrue(propagate_copies(block))
|
|
|
self.assertEqual(block.statements, [self.foo,
|
|
self.assertEqual(block.statements, [self.foo,
|
|
|
S('command', 'move', '$1', '$2'),
|
|
S('command', 'move', '$1', '$2'),
|
|
|
self.foo,
|
|
self.foo,
|
|
|
S('command', 'addu', '$3', '$4', '$2'),
|
|
S('command', 'addu', '$3', '$4', '$2'),
|
|
|
self.bar])
|
|
self.bar])
|
|
|
|
|
|
|
|
- #def test_copy_propagation_overwrite(self):
|
|
|
|
|
|
|
+ #def test_propagate_copies_overwrite(self):
|
|
|
# block = B([self.foo,
|
|
# block = B([self.foo,
|
|
|
# S('command', 'move', '$1', '$2'),
|
|
# S('command', 'move', '$1', '$2'),
|
|
|
# S('command', 'move', '$1', '$5'),
|
|
# S('command', 'move', '$1', '$5'),
|
|
|
# S('command', 'addu', '$3', '$1', '$4'),
|
|
# S('command', 'addu', '$3', '$1', '$4'),
|
|
|
# self.bar])
|
|
# self.bar])
|
|
|
|
|
|
|
|
- # self.assertTrue(copy_propagation(block))
|
|
|
|
|
|
|
+ # self.assertTrue(propagate_copies(block))
|
|
|
# self.assertEqual(block.statements, [self.foo,
|
|
# self.assertEqual(block.statements, [self.foo,
|
|
|
# S('command', 'move', '$1', '$2'),
|
|
# S('command', 'move', '$1', '$2'),
|
|
|
# S('command', 'move', '$1', '$5'),
|
|
# S('command', 'move', '$1', '$5'),
|
|
|
# S('command', 'addu', '$3', '$5', '$4'),
|
|
# S('command', 'addu', '$3', '$5', '$4'),
|
|
|
# self.bar])
|
|
# self.bar])
|
|
|
|
|
|
|
|
- def test_copy_propagation_false(self):
|
|
|
|
|
|
|
+ def test_propagate_copies_false(self):
|
|
|
arguments = [self.foo,
|
|
arguments = [self.foo,
|
|
|
S('command', 'move', '$1', '$2'),
|
|
S('command', 'move', '$1', '$2'),
|
|
|
S('command', 'move', '$10', '$20'),
|
|
S('command', 'move', '$10', '$20'),
|
|
@@ -90,10 +90,10 @@ class TestOptimizeAdvanced(unittest.TestCase):
|
|
|
S('command', 'addu', '$3', '$1', '$4'),
|
|
S('command', 'addu', '$3', '$1', '$4'),
|
|
|
self.bar]
|
|
self.bar]
|
|
|
block = B(arguments)
|
|
block = B(arguments)
|
|
|
- self.assertFalse(copy_propagation(block))
|
|
|
|
|
|
|
+ self.assertFalse(propagate_copies(block))
|
|
|
self.assertEqual(block.statements, arguments)
|
|
self.assertEqual(block.statements, arguments)
|
|
|
|
|
|
|
|
- def test_copy_propagation_false_severalmoves(self):
|
|
|
|
|
|
|
+ def test_propagate_copies_false_severalmoves(self):
|
|
|
arguments = [self.foo,
|
|
arguments = [self.foo,
|
|
|
S('command', 'move', '$1', '$2'),
|
|
S('command', 'move', '$1', '$2'),
|
|
|
self.foo,
|
|
self.foo,
|
|
@@ -101,7 +101,7 @@ class TestOptimizeAdvanced(unittest.TestCase):
|
|
|
S('command', 'addu', '$3', '$1', '$4'),
|
|
S('command', 'addu', '$3', '$1', '$4'),
|
|
|
self.bar]
|
|
self.bar]
|
|
|
block = B(arguments)
|
|
block = B(arguments)
|
|
|
- self.assertFalse(copy_propagation(block))
|
|
|
|
|
|
|
+ self.assertFalse(propagate_copies(block))
|
|
|
self.assertEqual(block.statements, arguments)
|
|
self.assertEqual(block.statements, arguments)
|
|
|
|
|
|
|
|
#def test_algebraic_transforms_add0(self):
|
|
#def test_algebraic_transforms_add0(self):
|