Remove CPP from nativeGen/RegAlloc/Graph/TrivColorable.hs
[ghc-hetmet.git] / compiler / nativeGen / RegAlloc / Graph / Main.hs
index 40c3c00..cdbe987 100644 (file)
@@ -43,7 +43,6 @@ maxSpinCount  = 10
 
 
 -- | The top level of the graph coloring register allocator.
---     
 regAlloc
        :: (Outputable instr, Instruction instr)
        => DynFlags
@@ -169,13 +168,11 @@ regAlloc_spin
                --      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
-                       { raGraph               = graph
+                       { raCode                = code
+                       , raGraph               = graph
                        , raGraphColored        = graph_colored_lint
                        , raCoalesced           = rmCoalesce
                        , raCodeCoalesced       = code_coalesced
@@ -211,13 +208,16 @@ regAlloc_spin
                        <- regSpill code_coalesced slotsFree rsSpill
 
                -- recalculate liveness
-               let code_nat    = map stripLive code_spilled
-               code_relive     <- mapM regLiveness code_nat
+               -- NOTE: we have to reverse the SCCs here to get them back into the reverse-dependency
+               --       order required by computeLiveness. If they're not in the correct order
+               --       that function will panic.
+               code_relive     <- mapM (regLiveness . reverseBlocksInTops) code_spilled
 
                -- record what happened in this stage for debugging
                let stat        =
                        RegAllocStatsSpill
-                       { raGraph       = graph_colored_lint
+                       { raCode        = code
+                       , raGraph       = graph_colored_lint
                        , raCoalesced   = rmCoalesce
                        , raSpillStats  = spillStats
                        , raSpillCosts  = spillCosts
@@ -236,9 +236,7 @@ regAlloc_spin
                        code_relive
 
 
-
 -- | Build a graph from the liveness and coalesce information in this code.
-
 buildGraph 
        :: Instruction instr
        => [LiveCmmTop instr]
@@ -266,7 +264,6 @@ buildGraph code
 
 -- | 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
@@ -289,7 +286,6 @@ graphAddConflictSet set graph
 
 -- | 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