diff python/ppci/codegen/interferencegraph.py @ 337:b00219172a42

Added cool lm3s811 qemu project
author Windel Bouwman
date Thu, 20 Feb 2014 20:04:52 +0100
parents 38f5f298ce0e
children 39bf68bf1891
line wrap: on
line diff
--- a/python/ppci/codegen/interferencegraph.py	Wed Feb 19 22:32:15 2014 +0100
+++ b/python/ppci/codegen/interferencegraph.py	Thu Feb 20 20:04:52 2014 +0100
@@ -1,3 +1,4 @@
+import logging
 from .graph import Graph, Node
 
 
@@ -19,6 +20,7 @@
     def __init__(self, flowgraph):
         """ Create a new interference graph from a flowgraph """
         super().__init__()
+        self.logger = logging.getLogger('interferencegraph')
         # Calculate liveness in CFG:
         ###
         # Liveness:
@@ -29,11 +31,17 @@
             n.live_in = set()
             n.live_out = set()
 
+        # Sort flowgraph nodes backwards:
+        cfg_nodes = list(flowgraph.nodes)
+        self.logger.debug('CFG nodes: {}'.format(cfg_nodes))
+        cfg_nodes.sort(reverse=True)
+
         # Dataflow fixed point iteration:
+        n_iterations = 0
         change = True
         while change:
             change = False
-            for n in flowgraph.nodes:
+            for n in cfg_nodes:
                 _in = n.live_in
                 _out = n.live_out
                 n.live_in = n.uses | (n.live_out - n.defs)
@@ -43,7 +51,9 @@
                     n.live_out = set()
                 n.live_out = n.live_out | n.defs
                 change = change or (_in != n.live_in) or (_out != n.live_out)
+            n_iterations += 1
 
+        self.logger.debug('Iterations: {} * {}'.format(n_iterations, len(cfg_nodes)))
         # Construct interference graph:
         for n in flowgraph.nodes:
             for tmp in n.live_out:
@@ -70,7 +80,7 @@
             if tmp in n.temps:
                 return n
         n = InterferenceGraphNode(self, tmp)
-        self.addNode(n)
+        self.add_node(n)
         return n
 
     def Combine(self, n, m):