Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type CmmAGraph = OrdList CgStmt
- type CmmAGraphScoped = (CmmAGraph, CmmTickScope)
- data CgStmt
- (<*>) :: CmmAGraph -> CmmAGraph -> CmmAGraph
- catAGraphs :: [CmmAGraph] -> CmmAGraph
- mkLabel :: BlockId -> CmmTickScope -> CmmAGraph
- mkMiddle :: CmmNode O O -> CmmAGraph
- mkLast :: CmmNode O C -> CmmAGraph
- outOfLine :: BlockId -> CmmAGraphScoped -> CmmAGraph
- lgraphOfAGraph :: CmmAGraphScoped -> UniqSM CmmGraph
- labelAGraph :: BlockId -> CmmAGraphScoped -> CmmGraph
- stackStubExpr :: Width -> CmmExpr
- mkNop :: CmmAGraph
- mkAssign :: CmmReg -> CmmExpr -> CmmAGraph
- mkStore :: CmmExpr -> CmmExpr -> CmmAGraph
- mkUnsafeCall :: ForeignTarget -> [CmmFormal] -> [CmmActual] -> CmmAGraph
- mkFinalCall :: Profile -> CmmExpr -> CCallConv -> [CmmExpr] -> UpdFrameOffset -> CmmAGraph
- mkCallReturnsTo :: Profile -> CmmExpr -> Convention -> [CmmExpr] -> BlockId -> ByteOff -> UpdFrameOffset -> [CmmExpr] -> CmmAGraph
- mkJumpReturnsTo :: Profile -> CmmExpr -> Convention -> [CmmExpr] -> BlockId -> ByteOff -> UpdFrameOffset -> CmmAGraph
- mkJump :: Profile -> Convention -> CmmExpr -> [CmmExpr] -> UpdFrameOffset -> CmmAGraph
- mkJumpExtra :: Profile -> Convention -> CmmExpr -> [CmmExpr] -> UpdFrameOffset -> [CmmExpr] -> CmmAGraph
- mkRawJump :: Profile -> CmmExpr -> UpdFrameOffset -> [GlobalReg] -> CmmAGraph
- mkCbranch :: CmmExpr -> BlockId -> BlockId -> Maybe Bool -> CmmAGraph
- mkSwitch :: CmmExpr -> SwitchTargets -> CmmAGraph
- mkReturn :: Profile -> CmmExpr -> [CmmExpr] -> UpdFrameOffset -> CmmAGraph
- mkComment :: FastString -> CmmAGraph
- mkCallEntry :: Profile -> Convention -> [CmmFormal] -> [CmmFormal] -> (Int, [GlobalReg], CmmAGraph)
- mkBranch :: BlockId -> CmmAGraph
- mkUnwind :: GlobalReg -> CmmExpr -> CmmAGraph
- copyInOflow :: Profile -> Convention -> Area -> [CmmFormal] -> [CmmFormal] -> (Int, [GlobalReg], CmmAGraph)
- copyOutOflow :: Profile -> Convention -> Transfer -> Area -> [CmmExpr] -> UpdFrameOffset -> [CmmExpr] -> (Int, [GlobalReg], CmmAGraph)
- noExtraStack :: [CmmExpr]
- toCall :: CmmExpr -> Maybe BlockId -> UpdFrameOffset -> ByteOff -> ByteOff -> [GlobalReg] -> CmmAGraph
- data Transfer
Documentation
type CmmAGraph = OrdList CgStmt Source #
CmmAGraph is a chunk of code consisting of:
- ordinary statements (assignments, stores etc.)
- jumps
- labels
- out-of-line labelled blocks
The semantics is that control falls through labels and out-of-line blocks. Everything after a jump up to the next label is by definition unreachable code, and will be discarded.
Two CmmAGraphs can be stuck together with *, with the meaning that control flows from the first to the second.
A CmmAGraph
can be turned into a CmmGraph
(closed at both ends)
by providing a label for the entry point and a tick scope; see
labelAGraph
.
type CmmAGraphScoped = (CmmAGraph, CmmTickScope) Source #
Unlabeled graph with tick scope
catAGraphs :: [CmmAGraph] -> CmmAGraph Source #
mkLabel :: BlockId -> CmmTickScope -> CmmAGraph Source #
creates a sequence "goto id; id:" as an AGraph
outOfLine :: BlockId -> CmmAGraphScoped -> CmmAGraph Source #
A labelled code block; should end in a last node
lgraphOfAGraph :: CmmAGraphScoped -> UniqSM CmmGraph Source #
allocate a fresh label for the entry point
labelAGraph :: BlockId -> CmmAGraphScoped -> CmmGraph Source #
use the given BlockId as the label of the entry point
stackStubExpr :: Width -> CmmExpr Source #
mkUnsafeCall :: ForeignTarget -> [CmmFormal] -> [CmmActual] -> CmmAGraph Source #
mkFinalCall :: Profile -> CmmExpr -> CCallConv -> [CmmExpr] -> UpdFrameOffset -> CmmAGraph Source #
mkCallReturnsTo :: Profile -> CmmExpr -> Convention -> [CmmExpr] -> BlockId -> ByteOff -> UpdFrameOffset -> [CmmExpr] -> CmmAGraph Source #
mkJumpReturnsTo :: Profile -> CmmExpr -> Convention -> [CmmExpr] -> BlockId -> ByteOff -> UpdFrameOffset -> CmmAGraph Source #
mkJumpExtra :: Profile -> Convention -> CmmExpr -> [CmmExpr] -> UpdFrameOffset -> [CmmExpr] -> CmmAGraph Source #
mkRawJump :: Profile -> CmmExpr -> UpdFrameOffset -> [GlobalReg] -> CmmAGraph Source #
A jump where the caller says what the live GlobalRegs are. Used for low-level hand-written Cmm.
mkCallEntry :: Profile -> Convention -> [CmmFormal] -> [CmmFormal] -> (Int, [GlobalReg], CmmAGraph) Source #
mkUnwind :: GlobalReg -> CmmExpr -> CmmAGraph Source #
Construct a CmmUnwind
node for the given register and unwinding
expression.
copyInOflow :: Profile -> Convention -> Area -> [CmmFormal] -> [CmmFormal] -> (Int, [GlobalReg], CmmAGraph) Source #
copyOutOflow :: Profile -> Convention -> Transfer -> Area -> [CmmExpr] -> UpdFrameOffset -> [CmmExpr] -> (Int, [GlobalReg], CmmAGraph) Source #
noExtraStack :: [CmmExpr] Source #