GHC.Cmm

ghc-9.14.0.20251028: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Cmm

Contents

- Cmm top-level datatypes
  - Blocks containing lists
- Info Tables
- Statements, expressions and types
- Pretty-printing

Synopsis

- type DCmmGroup = GenCmmGroup CmmStatics DCmmTopInfo DCmmGraph
- type CmmProgram = [CmmGroup]
- type CmmGroup = GenCmmGroup CmmStatics CmmTopInfo CmmGraph
- type CmmGroupSRTs = GenCmmGroup RawCmmStatics CmmTopInfo CmmGraph
- type RawCmmGroup = GenCmmGroup RawCmmStatics (LabelMap RawCmmStatics) CmmGraph
- type GenCmmGroup d h g = [GenCmmDecl d h g]
- type CmmDecl = GenCmmDecl CmmStatics CmmTopInfo CmmGraph
- type DCmmDecl = GenCmmDecl CmmStatics DCmmTopInfo DCmmGraph
- type CmmDeclSRTs = GenCmmDecl RawCmmStatics CmmTopInfo CmmGraph
- data GenCmmDecl d h g
  - = CmmProc h CLabel [GlobalRegUse] g
  - | CmmData Section d
- type CmmDataDecl = GenCmmDataDecl CmmStatics
- cmmDataDeclCmmDecl :: GenCmmDataDecl d -> GenCmmDecl d h g
- type DCmmGraph = GenGenCmmGraph DWrap CmmNode
- type CmmGraph = GenCmmGraph CmmNode
- type GenCmmGraph (n :: Extensibility -> Extensibility -> Type) = GenGenCmmGraph LabelMap n
- data GenGenCmmGraph (s :: Type -> Type) (n :: Extensibility -> Extensibility -> Type) = CmmGraph {
  - g_entry :: BlockId
  - g_graph :: Graph' s Block n C C
  }
- toBlockMap :: CmmGraph -> LabelMap CmmBlock
- revPostorder :: CmmGraph -> [CmmBlock]
- toBlockList :: CmmGraph -> [CmmBlock]
- type CmmBlock = Block CmmNode C C
- type RawCmmDecl = GenCmmDecl RawCmmStatics (LabelMap RawCmmStatics) CmmGraph
- data Section = Section SectionType CLabel
- data SectionType
  - = Text
  - | Data
  - | ReadOnlyData
  - | RelocatableReadOnlyData
  - | UninitialisedData
  - | InitArray
  - | FiniArray
  - | CString
  - | OtherSection String
- data GenCmmStatics (rawOnly :: Bool) where
  - CmmStatics :: CLabel -> CmmInfoTable -> CostCentreStack -> [CmmLit] -> [CmmLit] -> GenCmmStatics 'False
  - CmmStaticsRaw :: forall (rawOnly :: Bool). CLabel -> [CmmStatic] -> GenCmmStatics rawOnly
- type CmmStatics = GenCmmStatics 'False
- type RawCmmStatics = GenCmmStatics 'True
- data CmmStatic
  - = CmmStaticLit CmmLit
  - | CmmUninitialised Int
  - | CmmString ByteString
  - | CmmFileEmbed FilePath Int
- data SectionProtection
  - = ReadWriteSection
  - | ReadOnlySection
  - | WriteProtectedSection
- sectionProtection :: Section -> SectionProtection
- newtype DWrap a = DWrap [(BlockId, a)]
- unDeterm :: DWrap a -> [(BlockId, a)]
- removeDeterm :: DCmmGroup -> CmmGroup
- removeDetermDecl :: DCmmDecl -> CmmDecl
- removeDetermGraph :: DCmmGraph -> CmmGraph
- data GenBasicBlock i = BasicBlock BlockId [i]
- blockId :: GenBasicBlock i -> BlockId
- newtype ListGraph i = ListGraph [GenBasicBlock i]
- pprBBlock :: Outputable stmt => GenBasicBlock stmt -> SDoc
- data GenCmmTopInfo (f :: Type -> Type) = TopInfo {
  - info_tbls :: f CmmInfoTable
  - stack_info :: CmmStackInfo
  }
- type DCmmTopInfo = GenCmmTopInfo DWrap
- type CmmTopInfo = GenCmmTopInfo LabelMap
- data CmmStackInfo = StackInfo {
  - arg_space :: ByteOff
  - do_layout :: Bool
  }
- data CmmInfoTable = CmmInfoTable {
  - cit_lbl :: CLabel
  - cit_rep :: SMRep
  - cit_prof :: ProfilingInfo
  - cit_srt :: Maybe CLabel
  - cit_clo :: Maybe (Id, CostCentreStack)
  }
- topInfoTable :: forall a (s :: Type -> Type) (n :: Extensibility -> Extensibility -> Type). GenCmmDecl a CmmTopInfo (GenGenCmmGraph s n) -> Maybe CmmInfoTable
- topInfoTableD :: forall a (s :: Type -> Type) (n :: Extensibility -> Extensibility -> Type). GenCmmDecl a DCmmTopInfo (GenGenCmmGraph s n) -> Maybe CmmInfoTable
- data ClosureTypeInfo
  - = Constr ConTagZ ConstrDescription
  - | Fun FunArity ArgDescr
  - | Thunk
  - | ThunkSelector SelectorOffset
  - | BlackHole
  - | IndStatic
- data ProfilingInfo
  - = NoProfilingInfo
  - | ProfilingInfo ByteString ByteString
- type ConstrDescription = ByteString
- module GHC.Cmm.Node
- module GHC.Cmm.Expr
- pprCmmGroup :: (OutputableP Platform d, OutputableP Platform info, OutputableP Platform g) => Platform -> GenCmmGroup d info g -> SDoc
- pprSection :: Platform -> Section -> SDoc
- pprStatic :: Platform -> CmmStatic -> SDoc

# Cmm top-level datatypes

type DCmmGroup = GenCmmGroup CmmStatics DCmmTopInfo DCmmGraph Source #

Cmm group after STG generation

type CmmProgram = [CmmGroup] Source #

type CmmGroup = GenCmmGroup CmmStatics CmmTopInfo CmmGraph Source #

Cmm group before SRT generation

type CmmGroupSRTs = GenCmmGroup RawCmmStatics CmmTopInfo CmmGraph Source #

Cmm group with SRTs

type RawCmmGroup = GenCmmGroup RawCmmStatics (LabelMap RawCmmStatics) CmmGraph Source #

Raw cmm group (TODO (osa): not sure what that means)

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

type CmmDecl = GenCmmDecl CmmStatics CmmTopInfo CmmGraph Source #

type DCmmDecl = GenCmmDecl CmmStatics DCmmTopInfo DCmmGraph Source #

type CmmDeclSRTs = GenCmmDecl RawCmmStatics CmmTopInfo CmmGraph Source #

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).

Constructors

CmmProc h CLabel [GlobalRegUse] g |
CmmData Section d |

#### Instances

Instances details

(OutputableP Platform d, OutputableP Platform info, OutputableP Platform i) => OutputableP Platform (GenCmmDecl d info i) Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: Platform -> GenCmmDecl d info i -> SDoc Source #
Functor (GenCmmDecl d h) Source # |
Instance details Defined in GHC.Cmm Methods fmap :: (a -> b) -> GenCmmDecl d h a -> GenCmmDecl d h b Source # (<$) :: a -> GenCmmDecl d h b -> GenCmmDecl d h a Source #

type CmmDataDecl = GenCmmDataDecl CmmStatics Source #

cmmDataDeclCmmDecl :: GenCmmDataDecl d -> GenCmmDecl d h g Source #

type DCmmGraph = GenGenCmmGraph DWrap CmmNode Source #

type CmmGraph = GenCmmGraph CmmNode Source #

type GenCmmGraph (n :: Extensibility -> Extensibility -> Type) = GenGenCmmGraph LabelMap n Source #

data GenGenCmmGraph (s :: Type -> Type) (n :: Extensibility -> Extensibility -> Type) Source #

Constructors

CmmGraph |
Fields g_entry :: BlockId g_graph :: Graph' s Block n C C

#### Instances

Instances details

OutputableP Platform CmmGraph Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: Platform -> CmmGraph -> SDoc Source #

toBlockMap :: CmmGraph -> LabelMap CmmBlock Source #

revPostorder :: CmmGraph -> [CmmBlock] Source #

toBlockList :: CmmGraph -> [CmmBlock] Source #

type CmmBlock = Block CmmNode C C Source #

type RawCmmDecl = GenCmmDecl RawCmmStatics (LabelMap RawCmmStatics) CmmGraph Source #

data Section Source #

Constructors

Section SectionType CLabel |

data SectionType Source #

Constructors

Text |
Data |
ReadOnlyData |
RelocatableReadOnlyData |
UninitialisedData |
InitArray |
FiniArray |
CString |
OtherSection String |

#### Instances

Instances details

Show SectionType Source # |
Instance details Defined in GHC.Cmm Methods showsPrec :: Int -> SectionType -> ShowS Source # show :: SectionType -> String Source # showList :: [SectionType] -> ShowS Source #

data GenCmmStatics (rawOnly :: Bool) where Source #

Static data before or after SRT generation

Constructors

CmmStatics :: CLabel -> CmmInfoTable -> CostCentreStack -> [CmmLit] -> [CmmLit] -> GenCmmStatics 'False |
CmmStaticsRaw :: forall (rawOnly :: Bool). CLabel -> [CmmStatic] -> GenCmmStatics rawOnly | Static data, after SRTs are generated

#### Instances

Instances details

OutputableP Platform (GenCmmStatics a) Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: Platform -> GenCmmStatics a -> SDoc Source #

type CmmStatics = GenCmmStatics 'False Source #

type RawCmmStatics = GenCmmStatics 'True Source #

data CmmStatic Source #

Constructors

CmmStaticLit CmmLit | a literal value, size given by cmmLitRep of the literal.
CmmUninitialised Int | uninitialised data, N bytes long
CmmString ByteString | string of 8-bit values only, not zero terminated.
CmmFileEmbed FilePath Int | an embedded binary file and its byte length

#### Instances

Instances details

Outputable CmmStatic Source # |
Instance details Defined in GHC.Cmm Methods ppr :: CmmStatic -> SDoc Source #
OutputableP Platform CmmStatic Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: Platform -> CmmStatic -> SDoc Source #

data SectionProtection Source #

Constructors

ReadWriteSection |
ReadOnlySection |
WriteProtectedSection |

#### Instances

Instances details

Eq SectionProtection Source # |
Instance details Defined in GHC.Cmm Methods (==) :: SectionProtection -> SectionProtection -> Bool Source # (/=) :: SectionProtection -> SectionProtection -> Bool Source #

sectionProtection :: Section -> SectionProtection Source #

Should a data in this section be considered constant at runtime

newtype DWrap a Source #

Constructors

DWrap [(BlockId, a)] |

unDeterm :: DWrap a -> [(BlockId, a)] Source #

removeDeterm :: DCmmGroup -> CmmGroup Source #

removeDetermDecl :: DCmmDecl -> CmmDecl Source #

removeDetermGraph :: DCmmGraph -> CmmGraph Source #

## Blocks containing lists

data GenBasicBlock i Source #

Constructors

BasicBlock BlockId [i] |

#### Instances

Instances details

Functor GenBasicBlock Source # |
Instance details Defined in GHC.Cmm Methods fmap :: (a -> b) -> GenBasicBlock a -> GenBasicBlock b Source # (<$) :: a -> GenBasicBlock b -> GenBasicBlock a Source #
OutputableP env instr => OutputableP env (GenBasicBlock instr) Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: env -> GenBasicBlock instr -> SDoc Source #
Outputable instr => Outputable (GenBasicBlock instr) Source # |
Instance details Defined in GHC.Cmm Methods ppr :: GenBasicBlock instr -> SDoc Source #

blockId :: GenBasicBlock i -> BlockId Source #

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

newtype ListGraph i Source #

Constructors

ListGraph [GenBasicBlock i] |

#### Instances

Instances details

Functor ListGraph Source # |
Instance details Defined in GHC.Cmm Methods fmap :: (a -> b) -> ListGraph a -> ListGraph b Source # (<$) :: a -> ListGraph b -> ListGraph a Source #
OutputableP env instr => OutputableP env (ListGraph instr) Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: env -> ListGraph instr -> SDoc Source #
Outputable instr => Outputable (ListGraph instr) Source # |
Instance details Defined in GHC.Cmm Methods ppr :: ListGraph instr -> SDoc Source #

pprBBlock :: Outputable stmt => GenBasicBlock stmt -> SDoc Source #

# Info Tables

data GenCmmTopInfo (f :: Type -> Type) Source #

CmmTopInfo is attached to each CmmDecl (see defn of CmmGroup), and contains the extra info (beyond the executable code) that belongs to that CmmDecl.

Constructors

TopInfo |
Fields info_tbls :: f CmmInfoTable stack_info :: CmmStackInfo

#### Instances

Instances details

OutputableP Platform CmmTopInfo Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: Platform -> CmmTopInfo -> SDoc Source #

type DCmmTopInfo = GenCmmTopInfo DWrap Source #

type CmmTopInfo = GenCmmTopInfo LabelMap Source #

data CmmStackInfo Source #

Constructors

StackInfo |
Fields arg_space :: ByteOff do_layout :: Bool

#### Instances

Instances details

Outputable CmmStackInfo Source # |
Instance details Defined in GHC.Cmm Methods ppr :: CmmStackInfo -> SDoc Source #

data CmmInfoTable Source #

Info table as a haskell data type

Constructors

CmmInfoTable |
Fields cit_lbl :: CLabel cit_rep :: SMRep cit_prof :: ProfilingInfo cit_srt :: Maybe CLabel cit_clo :: Maybe (Id, CostCentreStack)

#### Instances

Instances details

Eq CmmInfoTable Source # |
Instance details Defined in GHC.Cmm Methods (==) :: CmmInfoTable -> CmmInfoTable -> Bool Source # (/=) :: CmmInfoTable -> CmmInfoTable -> Bool Source #
Ord CmmInfoTable Source # |
Instance details Defined in GHC.Cmm Methods compare :: CmmInfoTable -> CmmInfoTable -> Ordering Source # (<) :: CmmInfoTable -> CmmInfoTable -> Bool Source # (<=) :: CmmInfoTable -> CmmInfoTable -> Bool Source # (>) :: CmmInfoTable -> CmmInfoTable -> Bool Source # (>=) :: CmmInfoTable -> CmmInfoTable -> Bool Source # max :: CmmInfoTable -> CmmInfoTable -> CmmInfoTable Source # min :: CmmInfoTable -> CmmInfoTable -> CmmInfoTable Source #
OutputableP Platform CmmInfoTable Source # |
Instance details Defined in GHC.Cmm Methods pdoc :: Platform -> CmmInfoTable -> SDoc Source #

topInfoTable :: forall a (s :: Type -> Type) (n :: Extensibility -> Extensibility -> Type). GenCmmDecl a CmmTopInfo (GenGenCmmGraph s n) -> Maybe CmmInfoTable Source #

topInfoTableD :: forall a (s :: Type -> Type) (n :: Extensibility -> Extensibility -> Type). GenCmmDecl a DCmmTopInfo (GenGenCmmGraph s n) -> Maybe CmmInfoTable Source #

data ClosureTypeInfo Source #

Constructors

Constr ConTagZ ConstrDescription |
Fun FunArity ArgDescr |
Thunk |
ThunkSelector SelectorOffset |
BlackHole |
IndStatic |

#### Instances

Instances details

Outputable ClosureTypeInfo Source # |
Instance details Defined in GHC.Runtime.Heap.Layout Methods ppr :: ClosureTypeInfo -> SDoc Source #
Eq ClosureTypeInfo Source # |
Instance details Defined in GHC.Runtime.Heap.Layout Methods (==) :: ClosureTypeInfo -> ClosureTypeInfo -> Bool Source # (/=) :: ClosureTypeInfo -> ClosureTypeInfo -> Bool Source #
Ord ClosureTypeInfo Source # |
Instance details Defined in GHC.Runtime.Heap.Layout Methods compare :: ClosureTypeInfo -> ClosureTypeInfo -> Ordering Source # (<) :: ClosureTypeInfo -> ClosureTypeInfo -> Bool Source # (<=) :: ClosureTypeInfo -> ClosureTypeInfo -> Bool Source # (>) :: ClosureTypeInfo -> ClosureTypeInfo -> Bool Source # (>=) :: ClosureTypeInfo -> ClosureTypeInfo -> Bool Source # max :: ClosureTypeInfo -> ClosureTypeInfo -> ClosureTypeInfo Source # min :: ClosureTypeInfo -> ClosureTypeInfo -> ClosureTypeInfo Source #

data ProfilingInfo Source #

Constructors

NoProfilingInfo |
ProfilingInfo ByteString ByteString |

#### Instances

Instances details

Eq ProfilingInfo Source # |
Instance details Defined in GHC.Cmm Methods (==) :: ProfilingInfo -> ProfilingInfo -> Bool Source # (/=) :: ProfilingInfo -> ProfilingInfo -> Bool Source #
Ord ProfilingInfo Source # |
Instance details Defined in GHC.Cmm Methods compare :: ProfilingInfo -> ProfilingInfo -> Ordering Source # (<) :: ProfilingInfo -> ProfilingInfo -> Bool Source # (<=) :: ProfilingInfo -> ProfilingInfo -> Bool Source # (>) :: ProfilingInfo -> ProfilingInfo -> Bool Source # (>=) :: ProfilingInfo -> ProfilingInfo -> Bool Source # max :: ProfilingInfo -> ProfilingInfo -> ProfilingInfo Source # min :: ProfilingInfo -> ProfilingInfo -> ProfilingInfo Source #

type ConstrDescription = ByteString Source #

# Statements, expressions and types

module GHC.Cmm.Node

module GHC.Cmm.Expr

# Pretty-printing

pprCmmGroup :: (OutputableP Platform d, OutputableP Platform info, OutputableP Platform g) => Platform -> GenCmmGroup d info g -> SDoc Source #

pprSection :: Platform -> Section -> SDoc Source #

pprStatic :: Platform -> CmmStatic -> SDoc Source #