Mercurial > lcfOS
view python/flowgraph.py @ 278:9fca39eebe50
First implementation of regalloc with coalsesc
author | Windel Bouwman |
---|---|
date | Sun, 29 Sep 2013 14:08:15 +0200 |
parents | 046017431c6a |
children |
line wrap: on
line source
import graph class FlowGraphNode(graph.DiNode): """ A node in the flow graph """ def __init__(self, g, ins): super().__init__(g) self.ins = ins self.uses = set(ins.src) self.defs = set(ins.dst) self.live_in = set() self.live_out = set() def __repr__(self): r = '{}'.format(self.ins) if self.uses: r += ' uses:' + ', '.join(str(u) for u in self.uses) if self.defs: r += ' defs:' + ', '.join(str(d) for d in self.defs) return r class FlowGraph(graph.DiGraph): def __init__(self, instrs): """ Create a flowgraph from a list of abstract instructions """ super().__init__() self._map = {} # Add nodes: for ins in instrs: n = FlowGraphNode(self, ins) self._map[ins] = n self.addNode(n) # Make edges: prev = None for ins in instrs: n = self._map[ins] if prev: self.addEdge(prev, n) if ins.jumps: prev = None for j in ins.jumps: to_n = self._map[j] self.addEdge(n, to_n) else: prev = n