ghc-7.6.3: The GHC API

Safe Haskell | None

RegAlloc.Graph.SpillCost

Synopsis

- type SpillCostRecord = (VirtualReg, Int, Int, Int)
- plusSpillCostRecord :: SpillCostRecord -> SpillCostRecord -> SpillCostRecord
- pprSpillCostRecord :: (VirtualReg -> RegClass) -> (Reg -> SDoc) -> Graph VirtualReg RegClass RealReg -> SpillCostRecord -> SDoc
- type SpillCostInfo = UniqFM SpillCostRecord
- zeroSpillCostInfo :: SpillCostInfo
- plusSpillCostInfo :: SpillCostInfo -> SpillCostInfo -> SpillCostInfo
- slurpSpillCostInfo :: (Outputable instr, Instruction instr) => LiveCmmDecl statics instr -> SpillCostInfo
- chooseSpill :: SpillCostInfo -> Graph VirtualReg RegClass RealReg -> VirtualReg
- lifeMapFromSpillCostInfo :: SpillCostInfo -> UniqFM (VirtualReg, Int)

# Documentation

type SpillCostRecord = (VirtualReg, Int, Int, Int)

plusSpillCostRecord :: SpillCostRecord -> SpillCostRecord -> SpillCostRecord

pprSpillCostRecord :: (VirtualReg -> RegClass) -> (Reg -> SDoc) -> Graph VirtualReg RegClass RealReg -> SpillCostRecord -> SDoc

Show a spill cost record, including the degree from the graph and final calulated spill cos

type SpillCostInfo = UniqFM SpillCostRecord

zeroSpillCostInfo :: SpillCostInfo

plusSpillCostInfo :: SpillCostInfo -> SpillCostInfo -> SpillCostInfo

Add two spillCostInfos

slurpSpillCostInfo :: (Outputable instr, Instruction instr) => LiveCmmDecl statics instr -> SpillCostInfo

Slurp out information used for determining spill costs for each vreg, the number of times it was written to, read from, and the number of instructions it was live on entry to (lifetime)

chooseSpill :: SpillCostInfo -> Graph VirtualReg RegClass RealReg -> VirtualReg

Choose a node to spill from this graph

lifeMapFromSpillCostInfo :: SpillCostInfo -> UniqFM (VirtualReg, Int)