ghc-6.12.1: The GHC APISource codeContentsIndex
MkZipCfgCmm
Synopsis
mkNop :: CmmAGraph
mkAssign :: CmmReg -> CmmExpr -> CmmAGraph
mkStore :: CmmExpr -> CmmExpr -> CmmAGraph
mkCall :: CmmExpr -> (Convention, Convention) -> CmmFormals -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkCmmCall :: CmmExpr -> CmmFormals -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkSafeCall :: MidCallTarget -> CmmFormals -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkUnsafeCall :: MidCallTarget -> CmmFormals -> CmmActuals -> CmmAGraph
mkFinalCall :: CmmExpr -> CCallConv -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkJump :: CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkForeignJump :: Convention -> CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkJumpGC :: CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkCbranch :: CmmExpr -> BlockId -> BlockId -> CmmAGraph
mkSwitch :: CmmExpr -> [Maybe BlockId] -> CmmAGraph
mkReturn :: CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraph
mkReturnSimple :: CmmActuals -> UpdFrameOffset -> CmmAGraph
mkComment :: FastString -> CmmAGraph
copyInOflow :: Convention -> Area -> CmmFormals -> (Int, CmmAGraph)
copyInSlot :: Convention -> CmmFormals -> CmmAGraph
copyOutOflow :: Convention -> Transfer -> Area -> CmmActuals -> UpdFrameOffset -> (Int, [Middle])
copyOutSlot :: Convention -> [LocalReg] -> [Middle]
mkEntry :: BlockId -> Convention -> CmmFormals -> (Int, CmmAGraph)
mkCmmIfThenElse :: CmmExpr -> CmmAGraph -> CmmAGraph -> CmmAGraph
mkCmmIfThen :: CmmExpr -> CmmAGraph -> CmmAGraph
mkCmmWhileDo :: CmmExpr -> CmmAGraph -> CmmAGraph
(<*>) :: AGraph m l -> AGraph m l -> AGraph m l
catAGraphs :: [AGraph m l] -> AGraph m l
mkLabel :: LastNode l => BlockId -> AGraph m l
mkBranch :: (Outputable m, Outputable l, LastNode l) => BlockId -> AGraph m l
emptyAGraph :: AGraph m l
withFreshLabel :: String -> (BlockId -> AGraph m l) -> AGraph m l
withUnique :: (Unique -> AGraph m l) -> AGraph m l
outOfLine :: (LastNode l, Outputable m, Outputable l) => AGraph m l -> AGraph m l
lgraphOfAGraph :: AGraph m l -> UniqSM (LGraph m l)
graphOfAGraph :: AGraph m l -> UniqSM (Graph m l)
labelAGraph :: BlockId -> AGraph m l -> UniqSM (LGraph m l)
type CmmZ = GenCmm CmmStatic CmmInfo (CmmStackInfo, CmmGraph)
type CmmTopZ = GenCmmTop CmmStatic CmmInfo (CmmStackInfo, CmmGraph)
type CmmGraph = LGraph Middle Last
type CmmBlock = Block Middle Last
type CmmAGraph = AGraph Middle Last
type CmmStackInfo = (ByteOff, Maybe ByteOff)
data Middle
data Last
data Convention
= NativeDirectCall
| NativeNodeCall
| NativeReturn
| Slow
| GC
| PrimOpCall
| PrimOpReturn
| Foreign ForeignConvention
| Private
data ForeignConvention = ForeignConvention CCallConv [ForeignHint] [ForeignHint]
data MidCallTarget
= ForeignTarget CmmExpr ForeignConvention
| PrimTarget CallishMachOp
data Transfer
= Call
| Jump
| Ret
stackStubExpr :: Width -> CmmExpr
pprAGraph :: (Outputable m, LastNode l, Outputable l) => AGraph m l -> UniqSM SDoc
Documentation
mkNop :: CmmAGraphSource
mkAssign :: CmmReg -> CmmExpr -> CmmAGraphSource
mkStore :: CmmExpr -> CmmExpr -> CmmAGraphSource
mkCall :: CmmExpr -> (Convention, Convention) -> CmmFormals -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkCmmCall :: CmmExpr -> CmmFormals -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkSafeCall :: MidCallTarget -> CmmFormals -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkUnsafeCall :: MidCallTarget -> CmmFormals -> CmmActuals -> CmmAGraphSource
mkFinalCall :: CmmExpr -> CCallConv -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkJump :: CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkForeignJump :: Convention -> CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkJumpGC :: CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkCbranch :: CmmExpr -> BlockId -> BlockId -> CmmAGraphSource
mkSwitch :: CmmExpr -> [Maybe BlockId] -> CmmAGraphSource
mkReturn :: CmmExpr -> CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkReturnSimple :: CmmActuals -> UpdFrameOffset -> CmmAGraphSource
mkComment :: FastString -> CmmAGraphSource
copyInOflow :: Convention -> Area -> CmmFormals -> (Int, CmmAGraph)Source
copyInSlot :: Convention -> CmmFormals -> CmmAGraphSource
copyOutOflow :: Convention -> Transfer -> Area -> CmmActuals -> UpdFrameOffset -> (Int, [Middle])Source
copyOutSlot :: Convention -> [LocalReg] -> [Middle]Source
mkEntry :: BlockId -> Convention -> CmmFormals -> (Int, CmmAGraph)Source
mkCmmIfThenElse :: CmmExpr -> CmmAGraph -> CmmAGraph -> CmmAGraphSource
mkCmmIfThen :: CmmExpr -> CmmAGraph -> CmmAGraphSource
mkCmmWhileDo :: CmmExpr -> CmmAGraph -> CmmAGraphSource
(<*>) :: AGraph m l -> AGraph m l -> AGraph m lSource
catAGraphs :: [AGraph m l] -> AGraph m lSource
mkLabel :: LastNode l => BlockId -> AGraph m lSource
mkBranch :: (Outputable m, Outputable l, LastNode l) => BlockId -> AGraph m lSource
emptyAGraph :: AGraph m lSource
A graph is built up by splicing together graphs each containing a single node (where a label is considered a first node. The empty graph is a left and right unit for splicing. All of the AGraph constructors (even complex ones like mkIfThenElse, as well as the splicing operation *, are constant-time operations.
withFreshLabel :: String -> (BlockId -> AGraph m l) -> AGraph m lSource
This function provides access to fresh labels without requiring clients to be programmed monadically.
withUnique :: (Unique -> AGraph m l) -> AGraph m lSource
outOfLine :: (LastNode l, Outputable m, Outputable l) => AGraph m l -> AGraph m lSource

The argument is an AGraph that has an empty entry sequence and no exit sequence. The result is a new AGraph that has an empty entry sequence connected to an empty exit sequence, with the original graph sitting to the side out-of-line.

Example: mkMiddle (x = 3) *> outOfLine (mkLabel L <* ...stuff...) * mkMiddle (y = x) Control will flow directly from x=3 to y=x; the block starting with L is on the side.

N.B. algebraically forall g g' : g *> outOfLine g' == outOfLine g' <* g

lgraphOfAGraphSource
::
=> AGraph m lallocate a fresh label for the entry point
-> UniqSM (LGraph m l)
graphOfAGraph :: AGraph m l -> UniqSM (Graph m l)Source
Converting an abstract graph to a concrete form is expensive: the cost is linear in the number of nodes in the answer, plus N log N in the number of basic blocks. The conversion is also monadic because it may require the allocation of fresh, unique labels.
labelAGraphSource
::
=> BlockId
-> AGraph m luse the given BlockId as the label of the entry point
-> UniqSM (LGraph m l)
type CmmZ = GenCmm CmmStatic CmmInfo (CmmStackInfo, CmmGraph)Source
type CmmTopZ = GenCmmTop CmmStatic CmmInfo (CmmStackInfo, CmmGraph)Source
type CmmGraph = LGraph Middle LastSource
type CmmBlock = Block Middle LastSource
type CmmAGraph = AGraph Middle LastSource
type CmmStackInfo = (ByteOff, Maybe ByteOff)Source
data Middle Source
show/hide Instances
data Last Source
show/hide Instances
data Convention Source
Constructors
NativeDirectCall
NativeNodeCall
NativeReturn
Slow
GC
PrimOpCall
PrimOpReturn
Foreign ForeignConvention
Private
show/hide Instances
data ForeignConvention Source
Constructors
ForeignConvention CCallConv [ForeignHint] [ForeignHint]
show/hide Instances
data MidCallTarget Source
Constructors
ForeignTarget CmmExpr ForeignConvention
PrimTarget CallishMachOp
show/hide Instances
data Transfer Source
Constructors
Call
Jump
Ret
show/hide Instances
stackStubExpr :: Width -> CmmExprSource
pprAGraph :: (Outputable m, LastNode l, Outputable l) => AGraph m l -> UniqSM SDocSource
Produced by Haddock version 2.6.0