ghc-7.7.20120902: The GHC API

Safe HaskellNone




type CmmGroup = GenCmmGroup CmmStatics CmmInfoTables (ListGraph CmmStmt)Source

Cmm with the info table as a data type

type GenCmmGroup d h g = [GenCmmDecl d h g]Source

type RawCmmGroup = GenCmmGroup CmmStatics (BlockEnv CmmStatics) (ListGraph CmmStmt)Source

Cmm with the info tables converted to a list of CmmStatic along with the info table label. If we are building without tables-next-to-code there will be no statics

INVARIANT: if there is an info table, it has at least one CmmStatic

newtype ListGraph i Source

A control-flow graph represented as a list of extended basic blocks.

Code, may be empty. The first block is the entry point. The order is otherwise initially unimportant, but at some point the code gen will fix the order.

BlockIds must be unique across an entire compilation unit, since they are translated to assembly-language labels, which scope across a whole compilation unit.


ListGraph [GenBasicBlock i] 


Outputable instr => Outputable (ListGraph instr) 

data CmmInfoTable Source

Info table as a haskell data type

data ClosureTypeInfo Source


Constr ConstrTag ConstrDescription 
Fun FunArity ArgDescr 
ThunkSelector SelectorOffset 

topInfoTable :: GenCmmDecl a (BlockEnv i) (ListGraph b) -> Maybe iSource

Returns the info table associated with the CmmDecl's entry point, if any.

cmmMapGraph :: (g -> g') -> GenCmmGroup d h g -> GenCmmGroup d h g'Source

cmmTopMapGraph :: (g -> g') -> GenCmmDecl d h g -> GenCmmDecl d h g'Source

blockId :: GenBasicBlock i -> BlockIdSource

The branch block id is that of the first block in the branch, which is that branch's entry point

data GenCmmDecl d h g Source

A top-level chunk, abstracted over the type of the contents of the basic blocks (Cmm or instructions are the likely instantiations).


CmmProc h CLabel g 
CmmData Section d 


module CmmExpr