| 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