-- | The top level of the graph coloring register allocator.
---
regAlloc
:: (Outputable instr, Instruction instr)
=> DynFlags
-- and rewrite SPILL/RELOAD pseudos into real instructions along the way
let code_final = map stripLive code_spillclean
--- let spillNatTop = mapGenBlockTop spillNatBlock
--- let code_final = map spillNatTop code_nat
-
-- record what happened in this stage for debugging
let stat =
RegAllocStatsColored
code_relive
-
-- | Build a graph from the liveness and coalesce information in this code.
-
buildGraph
:: Instruction instr
=> [LiveCmmTop instr]
-- | Add some conflict edges to the graph.
-- Conflicts between virtual and real regs are recorded as exclusions.
---
graphAddConflictSet
:: UniqSet Reg
-> Color.Graph VirtualReg RegClass RealReg
-- | Add some coalesence edges to the graph
-- Coalesences between virtual and real regs are recorded as preferences.
---
graphAddCoalesce
:: (Reg, Reg)
-> Color.Graph VirtualReg RegClass RealReg