MkGraph

ghc-7.6.3: The GHC API

Safe Haskell | None

MkGraph

Synopsis

- type CmmAGraph = OrdList CgStmt
- data CgStmt
  - = CgLabel BlockId
  - | CgStmt (CmmNode O O)
  - | CgLast (CmmNode O C)
  - | CgFork BlockId CmmAGraph
- (<*>) :: CmmAGraph -> CmmAGraph -> CmmAGraph
- catAGraphs :: [CmmAGraph] -> CmmAGraph
- mkLabel :: BlockId -> CmmAGraph
- mkMiddle :: CmmNode O O -> CmmAGraph
- mkLast :: CmmNode O C -> CmmAGraph
- outOfLine :: BlockId -> CmmAGraph -> CmmAGraph
- lgraphOfAGraph :: CmmAGraph -> UniqSM CmmGraph
- labelAGraph :: BlockId -> CmmAGraph -> UniqSM CmmGraph
- stackStubExpr :: Width -> CmmExpr
- mkNop :: CmmAGraph
- mkAssign :: CmmReg -> CmmExpr -> CmmAGraph
- mkStore :: CmmExpr -> CmmExpr -> CmmAGraph
- mkUnsafeCall :: ForeignTarget -> [CmmFormal] -> [CmmActual] -> CmmAGraph
- mkFinalCall :: CmmExpr -> CCallConv -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkCallReturnsTo :: CmmExpr -> Convention -> [CmmActual] -> BlockId -> ByteOff -> UpdFrameOffset -> (ByteOff, [(CmmExpr, ByteOff)]) -> CmmAGraph
- mkJump :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkDirectJump :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkForeignJump :: Convention -> CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkForeignJumpExtra :: Convention -> CmmExpr -> [CmmActual] -> UpdFrameOffset -> (ByteOff, [(CmmExpr, ByteOff)]) -> CmmAGraph
- mkJumpGC :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkCbranch :: CmmExpr -> BlockId -> BlockId -> CmmAGraph
- mkSwitch :: CmmExpr -> [Maybe BlockId] -> CmmAGraph
- mkReturn :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkReturnSimple :: [CmmActual] -> UpdFrameOffset -> CmmAGraph
- mkComment :: FastString -> CmmAGraph
- mkCallEntry :: Convention -> [CmmFormal] -> (Int, CmmAGraph)
- mkBranch :: BlockId -> CmmAGraph
- copyInOflow :: Convention -> Area -> [CmmFormal] -> (Int, CmmAGraph)
- copyOutOflow :: Convention -> Transfer -> Area -> [CmmActual] -> UpdFrameOffset -> (ByteOff, [(CmmExpr, ByteOff)]) -> (Int, [GlobalReg], CmmAGraph)
- noExtraStack :: (ByteOff, [(CmmExpr, ByteOff)])
- toCall :: CmmExpr -> Maybe BlockId -> UpdFrameOffset -> ByteOff -> ByteOff -> [GlobalReg] -> CmmAGraph
- data Transfer
  - = Call
  - | Jump
  - | Ret

# Documentation

type CmmAGraph = OrdList CgStmt

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; see `labelAGraph`.

data CgStmt

Constructors

CgLabel BlockId |
CgStmt (CmmNode O O) |
CgLast (CmmNode O C) |
CgFork BlockId CmmAGraph |

(<*>) :: CmmAGraph -> CmmAGraph -> CmmAGraph

catAGraphs :: [CmmAGraph] -> CmmAGraph

mkLabel :: BlockId -> CmmAGraph

created a sequence goto id; id: as an AGraph

mkMiddle :: CmmNode O O -> CmmAGraph

creates an open AGraph from a given node

mkLast :: CmmNode O C -> CmmAGraph

created a closed AGraph from a given node

outOfLine :: BlockId -> CmmAGraph -> CmmAGraph

A labelled code block; should end in a last node

lgraphOfAGraph :: CmmAGraph -> UniqSM CmmGraph

allocate a fresh label for the entry point

labelAGraph :: BlockId -> CmmAGraph -> UniqSM CmmGraph

use the given BlockId as the label of the entry point

stackStubExpr :: Width -> CmmExpr

mkNop :: CmmAGraph

mkAssign :: CmmReg -> CmmExpr -> CmmAGraph

mkStore :: CmmExpr -> CmmExpr -> CmmAGraph

mkUnsafeCall :: ForeignTarget -> [CmmFormal] -> [CmmActual] -> CmmAGraph

mkFinalCall :: CmmExpr -> CCallConv -> [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkCallReturnsTo :: CmmExpr -> Convention -> [CmmActual] -> BlockId -> ByteOff -> UpdFrameOffset -> (ByteOff, [(CmmExpr, ByteOff)]) -> CmmAGraph

mkJump :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkDirectJump :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkForeignJump :: Convention -> CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkForeignJumpExtra :: Convention -> CmmExpr -> [CmmActual] -> UpdFrameOffset -> (ByteOff, [(CmmExpr, ByteOff)]) -> CmmAGraph

mkJumpGC :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkCbranch :: CmmExpr -> BlockId -> BlockId -> CmmAGraph

mkSwitch :: CmmExpr -> [Maybe BlockId] -> CmmAGraph

mkReturn :: CmmExpr -> [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkReturnSimple :: [CmmActual] -> UpdFrameOffset -> CmmAGraph

mkComment :: FastString -> CmmAGraph

mkCallEntry :: Convention -> [CmmFormal] -> (Int, CmmAGraph)

mkBranch :: BlockId -> CmmAGraph

copyInOflow :: Convention -> Area -> [CmmFormal] -> (Int, CmmAGraph)

copyOutOflow :: Convention -> Transfer -> Area -> [CmmActual] -> UpdFrameOffset -> (ByteOff, [(CmmExpr, ByteOff)]) -> (Int, [GlobalReg], CmmAGraph)

noExtraStack :: (ByteOff, [(CmmExpr, ByteOff)])

toCall :: CmmExpr -> Maybe BlockId -> UpdFrameOffset -> ByteOff -> ByteOff -> [GlobalReg] -> CmmAGraph

data Transfer

Constructors

Call |
Jump |
Ret |

Instances

Eq Transfer |