| ghc-6.12.3: The GHC API | Contents | Index

RegAlloc.Graph.Stats

Synopsis

data RegAllocStats instr

= RegAllocStatsStart {

raLiveCmm :: [LiveCmmTop instr]
raGraph :: Graph VirtualReg RegClass RealReg
raSpillCosts :: SpillCostInfo

}

| RegAllocStatsSpill {

raGraph :: Graph VirtualReg RegClass RealReg
raCoalesced :: UniqFM VirtualReg
raSpillStats :: SpillStats
raSpillCosts :: SpillCostInfo
raSpilled :: [LiveCmmTop instr]

}

| RegAllocStatsColored {

raGraph :: Graph VirtualReg RegClass RealReg
raGraphColored :: Graph VirtualReg RegClass RealReg
raCoalesced :: UniqFM VirtualReg
raPatched :: [LiveCmmTop instr]
raSpillClean :: [LiveCmmTop instr]
raFinal :: [NatCmmTop instr]
raSRMs :: (Int, Int, Int)

}

pprStats :: [RegAllocStats instr] -> Graph VirtualReg RegClass RealReg -> SDoc
pprStatsSpills :: [RegAllocStats instr] -> SDoc
pprStatsLifetimes :: [RegAllocStats instr] -> SDoc
pprStatsConflict :: [RegAllocStats instr] -> SDoc
pprStatsLifeConflict :: [RegAllocStats instr] -> Graph VirtualReg RegClass RealReg -> SDoc
countSRMs :: Instruction instr => LiveCmmTop instr -> (Int, Int, Int)
addSRM :: (Num t, Num t1, Num t2) => (t, t1, t2) -> (t, t1, t2) -> (t, t1, t2)

Documentation
data RegAllocStats instr

Constructors

RegAllocStatsStart | information to help choose which regs to spill

raLiveCmm :: [LiveCmmTop instr] | initial code, with liveness
raGraph :: Graph VirtualReg RegClass RealReg | the initial, uncolored graph
raSpillCosts :: SpillCostInfo |

RegAllocStatsSpill | code with spill instructions added

raGraph :: Graph VirtualReg RegClass RealReg | the initial, uncolored graph
raCoalesced :: UniqFM VirtualReg | the regs that were coaleced
raSpillStats :: SpillStats | spiller stats
raSpillCosts :: SpillCostInfo |
raSpilled :: [LiveCmmTop instr] |

RegAllocStatsColored | spill/reload/reg-reg moves present in this code

raGraph :: Graph VirtualReg RegClass RealReg | the initial, uncolored graph
raGraphColored :: Graph VirtualReg RegClass RealReg | the coalesced and colored graph
raCoalesced :: UniqFM VirtualReg | the regs that were coaleced
raPatched :: [LiveCmmTop instr] | code with vregs replaced by hregs
raSpillClean :: [LiveCmmTop instr] | code with unneeded spill/reloads cleaned out
raFinal :: [NatCmmTop instr] | final code
raSRMs :: (Int, Int, Int) |

Instances

Outputable instr => Outputable (RegAllocStats instr)

pprStats :: [RegAllocStats instr] -> Graph VirtualReg RegClass RealReg -> SDoc
Do all the different analysis on this list of RegAllocStats
pprStatsSpills :: [RegAllocStats instr] -> SDoc
Dump a table of how many spill loads / stores were inserted for each vreg.
pprStatsLifetimes :: [RegAllocStats instr] -> SDoc
Dump a table of how long vregs tend to live for in the initial code.
pprStatsConflict :: [RegAllocStats instr] -> SDoc
Dump a table of how many conflicts vregs tend to have in the initial code.
pprStatsLifeConflict

:: [RegAllocStats instr] |
-> Graph VirtualReg RegClass RealReg | global register conflict graph
-> SDoc |
For every vreg, dump it's how many conflicts it has and its lifetime good for making a scatter plot.

countSRMs :: Instruction instr => LiveCmmTop instr -> (Int, Int, Int)
Count spillreloadreg-reg moves. Lets us see how well the register allocator has done.
addSRM :: (Num t, Num t1, Num t2) => (t, t1, t2) -> (t, t1, t2) -> (t, t1, t2)
Produced by Haddock version 2.6.1