Просмотр исходного кода

Fixed recursiveness bug in liveness analysis.

Taddeus Kroes 14 лет назад
Родитель
Сommit
5b6e6336f5
2 измененных файлов с 6 добавлено и 4 удалено
  1. 5 4
      src/liveness.py
  2. 1 0
      src/optimize/__init__.py

+ 5 - 4
src/liveness.py

@@ -29,13 +29,14 @@ def create_use_def(block):
 
 
 def succ(block, known=[]):
 def succ(block, known=[]):
     """Recursively find all successors of a node."""
     """Recursively find all successors of a node."""
-    direct = filter(lambda b: b not in known, block.edges_to)
-    p = copy(direct)
+    direct = filter(lambda b: b != block and b not in known, block.edges_to)
+    s = copy(direct)
 
 
     for successor in direct:
     for successor in direct:
-        p += succ(successor, direct)
+        s += succ(successor, known + direct)
+        return s
 
 
-    return p
+    return s
 
 
 
 
 def create_in_out(blocks):
 def create_in_out(blocks):

+ 1 - 0
src/optimize/__init__.py

@@ -43,6 +43,7 @@ def optimize(statements, verbose=0):
     """Optimization wrapper function, calls global and basic-block level
     """Optimization wrapper function, calls global and basic-block level
     optimization functions."""
     optimization functions."""
     # Optimize on a global level
     # Optimize on a global level
+    # TODO: only count instructions (no directives)
     o = len(statements)
     o = len(statements)
     remove_redundant_jumps(statements)
     remove_redundant_jumps(statements)
     g = len(statements)
     g = len(statements)