Kaynağa Gözat

Working on copy propagation.

Jayke Meijer 14 yıl önce
ebeveyn
işleme
ed8637b887
2 değiştirilmiş dosya ile 15 ekleme ve 4 silme
  1. 2 2
      src/optimize/__init__.py
  2. 13 2
      src/optimize/advanced.py

+ 2 - 2
src/optimize/__init__.py

@@ -1,4 +1,4 @@
-from src.dataflow import find_basic_blocks
+from 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, \
@@ -57,7 +57,7 @@ def optimize_block(block):
     #              or fold_constants(block)
     #              or fold_constants(block)
 
 
     while eliminate_common_subexpressions(block) \
     while eliminate_common_subexpressions(block) \
-            | fold_constants(block):
+            | fold_constants(block) | copy_propagation(block):
         pass
         pass
 
 
 def optimize(statements, verbose=0):
 def optimize(statements, verbose=0):

+ 13 - 2
src/optimize/advanced.py

@@ -1,4 +1,4 @@
-from src.statement import Statement as S
+from statement import Statement as S
 
 
 
 
 def eliminate_common_subexpressions(block):
 def eliminate_common_subexpressions(block):
@@ -55,9 +55,20 @@ def fold_constants(block):
     """
     """
     return False
     return False
     
     
-def copy_propagtion(block):
+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 = []
+    count = 0
+    
+    while not block.end():
+        s = block.read()
+        
+        if s.is_command('move'):
+            moves.append((s[0], s[1]))
+            count += 1
+            
+    print "count", count
     return false
     return false