Commit 58ebd58f authored by Taddeus Kroes's avatar Taddeus Kroes

Merged conflicts.

parents f7e3d0c6 53ac258b
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
*.out *.out
*.toc *.toc
.coverage .coverage
parser.out
parsetab.py
coverage/ coverage/
build/ build/
src/Makefile_old src/Makefile_old
#!/usr/bin/python #!/usr/bin/python
from parser import parse_file from src.parser import parse_file
from optimize import optimize from src.optimize import optimize
from writer import write_statements from src.writer import write_statements
if __name__ == '__main__': if __name__ == '__main__':
from sys import argv, exit from sys import argv, exit
......
from dataflow import find_basic_blocks from src.dataflow import find_basic_blocks
from standard import redundant_move_1, redundant_move_2, \ from standard import redundant_move_1, redundant_move_2, \
redundant_move_3, redundant_move_4, redundant_load, \ redundant_move_3, redundant_move_4, redundant_load, \
......
from statement import Statement as S from src.statement import Statement as S
def create_variable(): def create_variable():
...@@ -156,15 +156,44 @@ def copy_propagation(block): ...@@ -156,15 +156,44 @@ def copy_propagation(block):
Rename values that were copied to there original, so the copy statement Rename values that were copied to there original, so the copy statement
might be useless, allowing it to be removed by dead code elimination. might be useless, allowing it to be removed by dead code elimination.
""" """
moves = [] moves_from = []
count = 0 moves_to = []
while not block.end(): while not block.end():
s = block.read() s = block.read()
print "len(s)",len(s)
if s.is_command('move'): if len(s) == 3:
moves.append((s[0], s[1])) print "s[0] = ", s[0]
count += 1 print "s[1] = ", s[1]
print "s[2] = ", s[2]
print "count", count
if moves_from:
print moves_from
print moves_to
if s.is_command('move') and s[0] not in moves_from:
moves_from.append(s[0])
moves_to.append(s[1])
print "Added move to list."
elif s.is_command('move'):
for i in xrange(len(moves_to)):
if moves_to[i] == s[0]:
moves_from[i] = s[1]
elif len(s) == 3 and s[0] in moves_to:
for i in xrange(len(moves_to)):
if moves_to[i] == s[0]:
del moves_to[i]
del moves_from[i]
"Removed move from list."
elif len(s) == 3 and (s[1] in moves_to or s[2] in moves_to):
print "Have to propagate."
for i in xrange(len(moves_to)):
if s[1] == moves_to[i]:
s[1] = moves_from[i]
print "Propagated"
if s[2] == moves_to[i]:
s[2] = moves_from[i]
print "Propagated"
return False return False
...@@ -8,7 +8,23 @@ from src.statement import Statement as S, Block as B ...@@ -8,7 +8,23 @@ from src.statement import Statement as S, Block as B
class TestOptimizeAdvanced(unittest.TestCase): class TestOptimizeAdvanced(unittest.TestCase):
def setUp(self): def setUp(self):
pass self.foo = S('command', 'foo')
self.bar = S('command', 'bar')
def test_eliminate_common_subexpressions(self): def test_eliminate_common_subexpressions(self):
pass pass
def test_copy_propagation_true(self):
# block = B([self.foo,
# S('command', 'move', '$1', '$2'),
# self.foo,
# S('command', 'addu', '$3', '$1', '$4'),
# self.bar])
#
# copy_propagation(block)
# self.assertEquals(block.statements, [self.foo,
# S('command', 'move', '$1', '$2'),
# self.foo,
# S('command', 'addu', '$3', '$2', '$4'),
# self.bar])
pass
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