ghc-7.4.2: The GHC API

Safe Haskell | None

CmmLive

Synopsis

- type CmmLive = RegSet
- cmmLiveness :: CmmGraph -> FuelUniqSM BlockEntryLiveness
- liveLattice :: DataflowLattice CmmLive
- noLiveOnEntry :: BlockId -> CmmLive -> a -> a
- xferLive :: BwdTransfer CmmNode CmmLive
- gen :: UserOfLocalRegs a => a -> RegSet -> RegSet
- kill :: DefinerOfLocalRegs a => a -> RegSet -> RegSet
- gen_kill :: (DefinerOfLocalRegs a, UserOfLocalRegs a) => a -> CmmLive -> CmmLive
- removeDeadAssignments :: CmmGraph -> FuelUniqSM CmmGraph

# Documentation

type CmmLive = RegSet

The variables live on entry to a block

cmmLiveness :: CmmGraph -> FuelUniqSM BlockEntryLiveness

Calculated liveness info for a CmmGraph

liveLattice :: DataflowLattice CmmLive

The dataflow lattice

noLiveOnEntry :: BlockId -> CmmLive -> a -> a

On entry to the procedure, there had better not be any LocalReg's live-in.

xferLive :: BwdTransfer CmmNode CmmLive

The transfer function EZY: Bits of this analysis are duplicated in CmmSpillReload, though it's not really easy to efficiently reuse all of this. Keep in mind if you need to update this analysis.

gen :: UserOfLocalRegs a => a -> RegSet -> RegSet

The transfer equations use the traditional `gen` and `kill` notations, which should be familiar from the Dragon Book.

kill :: DefinerOfLocalRegs a => a -> RegSet -> RegSet

gen_kill :: (DefinerOfLocalRegs a, UserOfLocalRegs a) => a -> CmmLive -> CmmLive

removeDeadAssignments :: CmmGraph -> FuelUniqSM CmmGraph