| ghc-6.10.4: The GHC API | Contents | Index
CmmBrokenBlock
Synopsis
data BrokenBlock = BrokenBlock {
brokenBlockId :: BlockId
brokenBlockEntry :: BlockEntryInfo
brokenBlockStmts :: [CmmStmt]
brokenBlockTargets :: [BlockId]
brokenBlockExit :: FinalStmt
}
data BlockEntryInfo
= FunctionEntry CmmInfo CLabel CmmFormalsWithoutKinds
| ContinuationEntry CmmFormalsWithoutKinds C_SRT Bool
| ControlEntry
data FinalStmt
= FinalBranch BlockId
| FinalReturn CmmActuals
| FinalJump CmmExpr CmmActuals
| FinalCall BlockId CmmCallTarget CmmFormals CmmActuals C_SRT CmmReturnInfo Bool
| FinalSwitch CmmExpr [Maybe BlockId]
breakBlock :: [BlockId] -> [Unique] -> CmmBasicBlock -> BlockEntryInfo -> ([(BlockId, ContFormat)], [BrokenBlock])
cmmBlockFromBrokenBlock :: BrokenBlock -> CmmBasicBlock
blocksToBlockEnv :: [BrokenBlock] -> BlockEnv BrokenBlock
adaptBlockToFormat :: [(BlockId, ContFormat)] -> Unique -> BrokenBlock -> [BrokenBlock]
selectContinuations :: [(BlockId, ContFormat)] -> [(BlockId, ContFormat)]
data ContFormat
makeContinuationEntries
Documentation
data BrokenBlock
Similar to a CmmBlock with a little extra information to help the CPS analysis.
Constructors
BrokenBlock |
brokenBlockId :: BlockId | The block's label like a `CmmBasicBlock`
brokenBlockEntry :: BlockEntryInfo | Ways this block can be entered
brokenBlockStmts :: [CmmStmt] | Body like a CmmBasicBlock (but without the last statement)
brokenBlockTargets :: [BlockId] | Blocks that this block could branch to either by conditional branches or via the last statement
brokenBlockExit :: FinalStmt | The final statement of the block
data BlockEntryInfo
How a block could be entered See Note [An example of CPS conversion]
Constructors
FunctionEntry CmmInfo CLabel CmmFormalsWithoutKinds | Block is the beginning of a function, parameters are: 1. Function header info 2. The function name 3. Aguments to function Only the formal parameters are live
ContinuationEntry CmmFormalsWithoutKinds C_SRT Bool | Return point of a function call, parameters are: 1. return values (argument to continuation) 2. SRT for the continuation's info table 3. True = GC block so ignore stack size Live variables, other than the return values, are on the stack
ControlEntry | Any other kind of block. Only entered due to control flow.
data FinalStmt
Final statement in a BlokenBlock. Constructors and arguments match those in `Cmm`, but are restricted to branches, returns, jumps, calls and switches
Constructors
FinalBranch BlockId | Same as `CmmBranch`. Target must be a ControlEntry
FinalReturn CmmActuals | Same as `CmmReturn`. Parameter is the return values.
FinalJump CmmExpr CmmActuals | Same as `CmmJump`. Parameters: 1. The function to call, 2. Arguments of the call
FinalCall BlockId CmmCallTarget CmmFormals CmmActuals C_SRT CmmReturnInfo Bool | Same as `CmmCallee` followed by CmmGoto. Parameters: 1. Target of the CmmGoto (must be a `ContinuationEntry`) 2. The function to call 3. Results from call (redundant with ContinuationEntry) 4. Arguments to call 5. SRT for the continuation's info table 6. Does the function return? 7. True = GC block so ignore stack size
FinalSwitch CmmExpr [Maybe BlockId] | Same as a `CmmSwitch`. Paremeters: 1. Scrutinee (zero based) 2. Targets
breakBlock
:: [BlockId] | Any GC blocks that should be special
-> [Unique] | An infinite list of uniques to create names of the new blocks with
-> CmmBasicBlock | Input block to break apart
-> BlockEntryInfo | Info for the first created `BrokenBlock`
-> ([(BlockId, ContFormat)], [BrokenBlock]) |
Takes a `CmmBasicBlock` and breaks it up into a list of `BrokenBlock` by splitting on each `CmmCall` in the `CmmBasicBlock`.
cmmBlockFromBrokenBlock :: BrokenBlock -> CmmBasicBlock
Convert from a BrokenBlock back to an equivalent CmmBasicBlock Needed by liveness analysis
blocksToBlockEnv :: [BrokenBlock] -> BlockEnv BrokenBlock
Build a mapping so we can lookup a `BrokenBlock` by its `BlockId`
adaptBlockToFormat :: [(BlockId, ContFormat)] -> Unique -> BrokenBlock -> [BrokenBlock]
selectContinuations :: [(BlockId, ContFormat)] -> [(BlockId, ContFormat)]
data ContFormat
Instances
Eq ContFormat
makeContinuationEntries
Produced by Haddock version 2.4.2