Mercurial > lcfOS
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):