ghc-7.7.20130829: The GHC API

Safe HaskellNone




type CmmAGraph = OrdList CgStmtSource

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.

mkLabel :: BlockId -> CmmAGraphSource

created a sequence goto id; id: as an AGraph

mkMiddle :: CmmNode O O -> CmmAGraphSource

creates an open AGraph from a given node

mkLast :: CmmNode O C -> CmmAGraphSource

created a closed AGraph from a given node

outOfLine :: BlockId -> CmmAGraph -> CmmAGraphSource

A labelled code block; should end in a last node

lgraphOfAGraph :: CmmAGraph -> UniqSM CmmGraphSource

allocate a fresh label for the entry point

labelAGraph :: BlockId -> CmmAGraph -> CmmGraphSource

use the given BlockId as the label of the entry point

mkRawJump :: DynFlags -> CmmExpr -> UpdFrameOffset -> [GlobalReg] -> CmmAGraphSource

A jump where the caller says what the live GlobalRegs are. Used for low-level hand-written Cmm.

data Transfer Source