Эх сурвалжийг харах

Merge branch 'master' of github.com:taddeus/peephole

Jayke Meijer 14 жил өмнө
parent
commit
2265148aab

+ 30 - 30
src/dataflow.py

@@ -25,38 +25,38 @@ class BasicBlock(Block):
         if block not in self.dominates:
         if block not in self.dominates:
             self.dominates.append(block)
             self.dominates.append(block)
             block.dominated_by.append(self)
             block.dominated_by.append(self)
-
-    def get_gen(self):
-        for s in self.statements:       
-            if s.is_arith():
-                self.gen_set.add(s[0])
-                print 'added: ', s[0]
-        
-        return self.gen_set
-        
-    def get_kill(self):
-#        if self.edges_from != []:
-        for backw in self.edges_from:
-            self.kill_set = self.kill_set | backw.get_kill()
             
             
-        self.kill_set = self.kill_set - self.get_gen()
-        print 'get_kill_set', self.kill_set
-        return self.kill_set
-
-    def get_in(self):
-        for backw in self.edges_from:
-            self.in_set = self.in_set | backw.get_out()
-        print 'in_set', self.in_set
-        return self.in_set
-
-    def get_out(self):
-        print 'gen_set', self.gen_set
-        print 'get_in', self.get_in()
-        print 'get_kill', self.get_kill()
-        self.out_set = self.gen_set | (self.get_in() - self.get_kill())
+    
+#    def get_gen(self):
+#        for s in self.statements:       
+#            if s.is_arith():
+#                self.gen_set.add(s[0])
+#                print 'added: ', s[0]
+#        
+#        return self.gen_set
+#        
+#    def get_kill(self):
+##        if self.edges_from != []:
+#    
+#        for backw in self.edges_from:
+#            self.kill_set = self.gen_set & backw.kill_set
+#            
+#        self.kill_set = self.kill_set - self.get_gen()
+#        print 'get_kill_set', self.kill_set
+#        return self.kill_set
+
+#    def get_in(self):
+#        for backw in self.edges_from:
+#            self.in_set = self.in_set | backw.out_set
+#        print 'in_set', self.in_set
+#        return self.in_set
+
+#    def get_out(self):
+#        print 'gen_set', self.gen_set
+#        print 'get_in', self.get_in()
+#        print 'get_kill', self.get_kill()
+#        self.out_set = self.gen_set | (self.get_in() - self.get_kill())
         
         
-def reaching_definition(blocks):
-    generate_flow_graph(blocks)
 
 
     
     
 
 

+ 1 - 1
src/optimize/advanced.py

@@ -81,7 +81,7 @@ def eliminate_common_subexpressions(block):
     block.reverse_statements()
     block.reverse_statements()
 
 
     return found
     return found
-
+    
 
 
 def to_hex(value):
 def to_hex(value):
     """Create the hexadecimal string of an integer."""
     """Create the hexadecimal string of an integer."""

+ 13 - 6
tests/test_dataflow.py

@@ -43,14 +43,21 @@ class TestDataflow(unittest.TestCase):
 #                
 #                
 #        blocks = [b1, b2]
 #        blocks = [b1, b2]
 #        
 #        
+#        # initialize  out[B] = gen[B] for every block        
 #        for block in blocks:
 #        for block in blocks:
 #            block.out_set = block.get_gen()
 #            block.out_set = block.get_gen()
-#            print 'block.out_set', block.out_set       
-
-#        generate_flow_graph(blocks)     
-#        print b1.get_gen()
-#        print b2.get_gen()
-#        print b2.get_out()
+#            print 'block.out_set', block.out_set
+#            
+#        generate_flow_graph(blocks)
+
+#        change = True
+#        while change:
+#            for i, block in enumerate(blocks):
+#                block.get_in()
+#                oldout = block.out_set
+#                newout = block.get_out()
+#                if (block.out_set == block.get_out()):
+#                    change = False
 
 
 
 
     def test_generate_flow_graph_simple(self):
     def test_generate_flow_graph_simple(self):