import RegLiveness
import RegSpill
import MachRegs
+import MachInstrs
import Outputable
import UniqFM
-- a successful coloring
| RegAllocStatsColored
{ raGraph :: Color.Graph Reg RegClass Reg -- ^ the colored graph
- , raPatchedCmm :: [LiveCmmTop] } -- ^ code after register allocation
-
+ , raPatchedCmm :: [LiveCmmTop] -- ^ code after register allocation
+ , raFinalCmm :: [NatCmmTop] } -- ^ final code
instance Outputable RegAllocStats where
$$ text ""
$$ text "# Native code after register allocation."
$$ ppr (raPatchedCmm s)
+ $$ text ""
+ $$ text "# Final code, after rewriting spill/rewrite pseudo instrs."
+ $$ ppr (raFinalCmm s)
+ $$ text ""
-- | Do all the different analysis on this list of RegAllocStats
= let lifeMap = foldl' plusUFM emptyUFM
[ raLifetimes s | s@RegAllocStatsStart{} <- stats ]
- scatter = map (\r -> let Just (_, lifetime) = lookupUFM lifeMap r
- Just node = Color.lookupNode graph r
+ scatter = map (\r -> let lifetime = case lookupUFM lifeMap r of
+ Just (_, l) -> l
+ Nothing -> 0
+ Just node = Color.lookupNode graph r
in parens $ hcat $ punctuate (text ", ")
[ doubleQuotes $ ppr $ Color.nodeId node
, ppr $ sizeUniqSet (Color.nodeConflicts node)