ghc-9.6.3: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Stg.Syntax

Synopsis

- data StgArg
  - = StgVarArg Id
  - | StgLitArg Literal
- data GenStgTopBinding pass
  - = StgTopLifted (GenStgBinding pass)
  - | StgTopStringLit Id ByteString
- data GenStgBinding pass
  - = StgNonRec (BinderP pass) (GenStgRhs pass)
  - | StgRec [(BinderP pass, GenStgRhs pass)]
- data GenStgExpr pass
  - = StgApp Id [StgArg]
  - | StgLit Literal
  - | StgConApp DataCon ConstructorNumber [StgArg] [Type]
  - | StgOpApp StgOp [StgArg] Type
  - | StgCase (GenStgExpr pass) (BinderP pass) AltType [GenStgAlt pass]
  - | StgLet (XLet pass) (GenStgBinding pass) (GenStgExpr pass)
  - | StgLetNoEscape (XLetNoEscape pass) (GenStgBinding pass) (GenStgExpr pass)
  - | StgTick StgTickish (GenStgExpr pass)
- data GenStgRhs pass
  - = StgRhsClosure (XRhsClosure pass) CostCentreStack !UpdateFlag [BinderP pass] (GenStgExpr pass)
  - | StgRhsCon CostCentreStack DataCon ConstructorNumber [StgTickish] [StgArg]
- data GenStgAlt pass = GenStgAlt {
  - alt_con :: !AltCon
  - alt_bndrs :: ![BinderP pass]
  - alt_rhs :: !(GenStgExpr pass)
  }
- data AltType
  - = PolyAlt
  - | MultiValAlt Int
  - | AlgAlt TyCon
  - | PrimAlt PrimRep
- data StgPass
  - = Vanilla
  - | LiftLams
  - | InferTaggedBinders
  - | InferTagged
  - | CodeGen
- type family BinderP (pass :: StgPass)
- type family XRhsClosure (pass :: StgPass)
- type family XLet (pass :: StgPass)
- type family XLetNoEscape (pass :: StgPass)
- data NoExtFieldSilent
- noExtFieldSilent :: NoExtFieldSilent
- type OutputablePass pass = (Outputable (XLet pass), Outputable (XLetNoEscape pass), Outputable (XRhsClosure pass), OutputableBndr (BinderP pass))
- data UpdateFlag
  - = ReEntrant
  - | Updatable
  - | SingleEntry
- isUpdatable :: UpdateFlag -> Bool
- data ConstructorNumber
  - = NoNumber
  - | Numbered Int
- type StgTopBinding = GenStgTopBinding 'Vanilla
- type StgBinding = GenStgBinding 'Vanilla
- type StgExpr = GenStgExpr 'Vanilla
- type StgRhs = GenStgRhs 'Vanilla
- type StgAlt = GenStgAlt 'Vanilla
- type CgStgTopBinding = GenStgTopBinding 'CodeGen
- type CgStgBinding = GenStgBinding 'CodeGen
- type CgStgExpr = GenStgExpr 'CodeGen
- type CgStgRhs = GenStgRhs 'CodeGen
- type CgStgAlt = GenStgAlt 'CodeGen
- type TgStgTopBinding = GenStgTopBinding 'CodeGen
- type TgStgBinding = GenStgBinding 'CodeGen
- type TgStgExpr = GenStgExpr 'CodeGen
- type TgStgRhs = GenStgRhs 'CodeGen
- type TgStgAlt = GenStgAlt 'CodeGen
- type LlStgTopBinding = GenStgTopBinding 'LiftLams
- type LlStgBinding = GenStgBinding 'LiftLams
- type LlStgExpr = GenStgExpr 'LiftLams
- type LlStgRhs = GenStgRhs 'LiftLams
- type LlStgAlt = GenStgAlt 'LiftLams
- type InStgArg = StgArg
- type InStgTopBinding = StgTopBinding
- type InStgBinding = StgBinding
- type InStgExpr = StgExpr
- type InStgRhs = StgRhs
- type InStgAlt = StgAlt
- type OutStgArg = StgArg
- type OutStgTopBinding = StgTopBinding
- type OutStgBinding = StgBinding
- type OutStgExpr = StgExpr
- type OutStgRhs = StgRhs
- type OutStgAlt = StgAlt
- data StgOp
  - = StgPrimOp PrimOp
  - | StgPrimCallOp PrimCall
  - | StgFCallOp ForeignCall Type
- stgRhsArity :: StgRhs -> Int
- freeVarsOfRhs :: XRhsClosure pass ~ DIdSet => GenStgRhs pass -> DIdSet
- isDllConApp :: Platform -> Bool -> Module -> DataCon -> [StgArg] -> Bool
- stgArgType :: StgArg -> Type
- stgCaseBndrInScope :: AltType -> Bool -> Bool
- data StgPprOpts = StgPprOpts {
  - stgSccEnabled :: !Bool
  }
- panicStgPprOpts :: StgPprOpts
- shortStgPprOpts :: StgPprOpts
- pprStgArg :: StgArg -> SDoc
- pprStgExpr :: OutputablePass pass => StgPprOpts -> GenStgExpr pass -> SDoc
- pprStgRhs :: OutputablePass pass => StgPprOpts -> GenStgRhs pass -> SDoc
- pprStgBinding :: OutputablePass pass => StgPprOpts -> GenStgBinding pass -> SDoc
- pprStgAlt :: OutputablePass pass => StgPprOpts -> Bool -> GenStgAlt pass -> SDoc
- pprGenStgTopBinding :: OutputablePass pass => StgPprOpts -> GenStgTopBinding pass -> SDoc
- pprStgTopBinding :: OutputablePass pass => StgPprOpts -> GenStgTopBinding pass -> SDoc
- pprGenStgTopBindings :: OutputablePass pass => StgPprOpts -> [GenStgTopBinding pass] -> SDoc
- pprStgTopBindings :: OutputablePass pass => StgPprOpts -> [GenStgTopBinding pass] -> SDoc

# Documentation

data StgArg Source #

Constructors

StgVarArg Id |
StgLitArg Literal |

#### Instances

Instances details

Outputable StgArg Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: StgArg -> SDoc Source #

data GenStgTopBinding pass Source #

A top-level binding.

Constructors

StgTopLifted (GenStgBinding pass) |
StgTopStringLit Id ByteString |

data GenStgBinding pass Source #

Constructors

StgNonRec (BinderP pass) (GenStgRhs pass) |
StgRec [(BinderP pass, GenStgRhs pass)] |

#### Instances

Instances details

OutputablePass pass => Outputable (GenStgBinding pass) Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: GenStgBinding pass -> SDoc Source #

data GenStgExpr pass Source #

Constructors

StgApp Id [StgArg] |
StgLit Literal |
StgConApp DataCon ConstructorNumber [StgArg] [Type] |
StgOpApp StgOp [StgArg] Type |
StgCase (GenStgExpr pass) (BinderP pass) AltType [GenStgAlt pass] |
StgLet (XLet pass) (GenStgBinding pass) (GenStgExpr pass) |
StgLetNoEscape (XLetNoEscape pass) (GenStgBinding pass) (GenStgExpr pass) |
StgTick StgTickish (GenStgExpr pass) |

#### Instances

Instances details

OutputablePass pass => Outputable (GenStgExpr pass) Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: GenStgExpr pass -> SDoc Source #

data GenStgRhs pass Source #

Constructors

StgRhsClosure |

Fields

- (XRhsClosure pass)

  Extension point for non-global free var list just before `CodeGen`.

- CostCentreStack

  CCS to be attached (default is CurrentCCS)

- !UpdateFlag

  `ReEntrant` | `Updatable` | `SingleEntry`

- [BinderP pass]

  arguments; if empty, then not a function; as above, order is important.

- (GenStgExpr pass)

  body

StgRhsCon CostCentreStack DataCon ConstructorNumber [StgTickish] [StgArg] |

#### Instances

Instances details

OutputablePass pass => Outputable (GenStgRhs pass) Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: GenStgRhs pass -> SDoc Source #

data GenStgAlt pass Source #

Constructors

GenStgAlt |

Fields

- alt_con :: !AltCon
- alt_bndrs :: ![BinderP pass]
- alt_rhs :: !(GenStgExpr pass)

data AltType Source #

Constructors

PolyAlt |
MultiValAlt Int |
AlgAlt TyCon |
PrimAlt PrimRep |

#### Instances

Instances details

Outputable AltType Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: AltType -> SDoc Source #

data StgPass Source #

Used as a data type index for the stgSyn AST

Constructors

Vanilla |
LiftLams | Use internally by the lambda lifting pass
InferTaggedBinders | Tag inference information on binders. See Note [Tag inference passes] in GHC.Stg.InferTags
InferTagged | Tag inference information put on relevant StgApp nodes See Note [Tag inference passes] in GHC.Stg.InferTags
CodeGen |

type family BinderP (pass :: StgPass) Source #

#### Instances

Instances details

type BinderP 'CodeGen Source # |
Instance details Defined in GHC.Stg.Syntax type BinderP 'CodeGen = Id
type BinderP 'InferTagged Source # |
Instance details Defined in GHC.Stg.Syntax type BinderP 'InferTagged = Id
type BinderP 'InferTaggedBinders Source # |
Instance details Defined in GHC.Stg.InferTags.Types type BinderP 'InferTaggedBinders = (Id, TagSig)
type BinderP 'LiftLams Source # |
Instance details Defined in GHC.Stg.Lift.Analysis type BinderP 'LiftLams = BinderInfo
type BinderP 'Vanilla Source # |
Instance details Defined in GHC.Stg.Syntax type BinderP 'Vanilla = Id

type family XRhsClosure (pass :: StgPass) Source #

#### Instances

Instances details

type XRhsClosure 'CodeGen Source # | Code gen needs to track non-global free vars
Instance details Defined in GHC.Stg.Syntax type XRhsClosure 'CodeGen = DIdSet
type XRhsClosure 'InferTagged Source # |
Instance details Defined in GHC.Stg.Syntax type XRhsClosure 'InferTagged = NoExtFieldSilent
type XRhsClosure 'InferTaggedBinders Source # |
Instance details Defined in GHC.Stg.InferTags.Types type XRhsClosure 'InferTaggedBinders = XRhsClosure 'CodeGen
type XRhsClosure 'LiftLams Source # |
Instance details Defined in GHC.Stg.Lift.Analysis type XRhsClosure 'LiftLams = DIdSet
type XRhsClosure 'Vanilla Source # |
Instance details Defined in GHC.Stg.Syntax type XRhsClosure 'Vanilla = NoExtFieldSilent

type family XLet (pass :: StgPass) Source #

#### Instances

Instances details

type XLet 'CodeGen Source # |
Instance details Defined in GHC.Stg.Syntax type XLet 'CodeGen = NoExtFieldSilent
type XLet 'InferTagged Source # |
Instance details Defined in GHC.Stg.Syntax type XLet 'InferTagged = NoExtFieldSilent
type XLet 'InferTaggedBinders Source # |
Instance details Defined in GHC.Stg.InferTags.Types type XLet 'InferTaggedBinders = XLet 'CodeGen
type XLet 'LiftLams Source # |
Instance details Defined in GHC.Stg.Lift.Analysis type XLet 'LiftLams = Skeleton
type XLet 'Vanilla Source # |
Instance details Defined in GHC.Stg.Syntax type XLet 'Vanilla = NoExtFieldSilent

type family XLetNoEscape (pass :: StgPass) Source #

#### Instances

Instances details

type XLetNoEscape 'CodeGen Source # |
Instance details Defined in GHC.Stg.Syntax type XLetNoEscape 'CodeGen = NoExtFieldSilent
type XLetNoEscape 'InferTagged Source # |
Instance details Defined in GHC.Stg.Syntax type XLetNoEscape 'InferTagged = NoExtFieldSilent
type XLetNoEscape 'InferTaggedBinders Source # |
Instance details Defined in GHC.Stg.InferTags.Types type XLetNoEscape 'InferTaggedBinders = XLetNoEscape 'CodeGen
type XLetNoEscape 'LiftLams Source # |
Instance details Defined in GHC.Stg.Lift.Analysis type XLetNoEscape 'LiftLams = Skeleton
type XLetNoEscape 'Vanilla Source # |
Instance details Defined in GHC.Stg.Syntax type XLetNoEscape 'Vanilla = NoExtFieldSilent

data NoExtFieldSilent Source #

Like `NoExtField`, but with an `Outputable` instance that returns `empty`.

#### Instances

Instances details

Data NoExtFieldSilent Source # |

Instance details

Defined in GHC.Stg.Syntax

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NoExtFieldSilent -> c NoExtFieldSilent Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c NoExtFieldSilent Source #

toConstr :: NoExtFieldSilent -> Constr Source #

dataTypeOf :: NoExtFieldSilent -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c NoExtFieldSilent) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NoExtFieldSilent) Source #

gmapT :: (forall b. Data b => b -> b) -> NoExtFieldSilent -> NoExtFieldSilent Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NoExtFieldSilent -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NoExtFieldSilent -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> NoExtFieldSilent -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> NoExtFieldSilent -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> NoExtFieldSilent -> m NoExtFieldSilent Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NoExtFieldSilent -> m NoExtFieldSilent Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NoExtFieldSilent -> m NoExtFieldSilent Source #

Outputable NoExtFieldSilent Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: NoExtFieldSilent -> SDoc Source #
Eq NoExtFieldSilent Source # |
Instance details Defined in GHC.Stg.Syntax Methods (==) :: NoExtFieldSilent -> NoExtFieldSilent -> Bool # (/=) :: NoExtFieldSilent -> NoExtFieldSilent -> Bool #
Ord NoExtFieldSilent Source # |

Instance details

Defined in GHC.Stg.Syntax

Methods

compare :: NoExtFieldSilent -> NoExtFieldSilent -> Ordering #

(<) :: NoExtFieldSilent -> NoExtFieldSilent -> Bool #

(<=) :: NoExtFieldSilent -> NoExtFieldSilent -> Bool #

(>) :: NoExtFieldSilent -> NoExtFieldSilent -> Bool #

(>=) :: NoExtFieldSilent -> NoExtFieldSilent -> Bool #

max :: NoExtFieldSilent -> NoExtFieldSilent -> NoExtFieldSilent #

min :: NoExtFieldSilent -> NoExtFieldSilent -> NoExtFieldSilent #

noExtFieldSilent :: NoExtFieldSilent Source #

Used when constructing a term with an unused extension point that should not appear in pretty-printed output at all.

type OutputablePass pass = (Outputable (XLet pass), Outputable (XLetNoEscape pass), Outputable (XRhsClosure pass), OutputableBndr (BinderP pass)) Source #

data UpdateFlag Source #

Constructors

ReEntrant |
Updatable |
SingleEntry |

#### Instances

Instances details

Outputable UpdateFlag Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: UpdateFlag -> SDoc Source #

isUpdatable :: UpdateFlag -> Bool Source #

data ConstructorNumber Source #

When `-fdistinct-constructor-tables` is turned on then each usage of a constructor is given an unique number and an info table is generated for each different constructor.

Constructors

NoNumber |
Numbered Int |

#### Instances

Instances details

Outputable ConstructorNumber Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: ConstructorNumber -> SDoc Source #

type StgTopBinding = GenStgTopBinding 'Vanilla Source #

type StgBinding = GenStgBinding 'Vanilla Source #

type StgExpr = GenStgExpr 'Vanilla Source #

type StgRhs = GenStgRhs 'Vanilla Source #

type StgAlt = GenStgAlt 'Vanilla Source #

type CgStgTopBinding = GenStgTopBinding 'CodeGen Source #

type CgStgBinding = GenStgBinding 'CodeGen Source #

type CgStgExpr = GenStgExpr 'CodeGen Source #

type CgStgRhs = GenStgRhs 'CodeGen Source #

type CgStgAlt = GenStgAlt 'CodeGen Source #

type TgStgTopBinding = GenStgTopBinding 'CodeGen Source #

type TgStgBinding = GenStgBinding 'CodeGen Source #

type TgStgExpr = GenStgExpr 'CodeGen Source #

type TgStgRhs = GenStgRhs 'CodeGen Source #

type TgStgAlt = GenStgAlt 'CodeGen Source #

type LlStgTopBinding = GenStgTopBinding 'LiftLams Source #

type LlStgBinding = GenStgBinding 'LiftLams Source #

type LlStgExpr = GenStgExpr 'LiftLams Source #

type LlStgRhs = GenStgRhs 'LiftLams Source #

type LlStgAlt = GenStgAlt 'LiftLams Source #

type InStgArg = StgArg Source #

type InStgTopBinding = StgTopBinding Source #

type InStgBinding = StgBinding Source #

type InStgExpr = StgExpr Source #

type InStgRhs = StgRhs Source #

type InStgAlt = StgAlt Source #

type OutStgArg = StgArg Source #

type OutStgTopBinding = StgTopBinding Source #

type OutStgBinding = StgBinding Source #

type OutStgExpr = StgExpr Source #

type OutStgRhs = StgRhs Source #

type OutStgAlt = StgAlt Source #

data StgOp Source #

Constructors

StgPrimOp PrimOp |
StgPrimCallOp PrimCall |
StgFCallOp ForeignCall Type |

#### Instances

Instances details

Outputable StgOp Source # |
Instance details Defined in GHC.Stg.Syntax Methods ppr :: StgOp -> SDoc Source #

stgRhsArity :: StgRhs -> Int Source #

freeVarsOfRhs :: XRhsClosure pass ~ DIdSet => GenStgRhs pass -> DIdSet Source #

isDllConApp :: Platform -> Bool -> Module -> DataCon -> [StgArg] -> Bool Source #

Does this constructor application refer to anything in a different *Windows* DLL? If so, we can't allocate it statically

stgArgType :: StgArg -> Type Source #

Type of an `StgArg`

Very half baked because we have lost the type arguments.

stgCaseBndrInScope Source #

Arguments

:: AltType |
-> Bool | unarised?
-> Bool |

Given an alt type and whether the program is unarised, return whether the case binder is in scope.

Case binders of unboxed tuple or unboxed sum type always dead after the unariser has run. See Note [Post-unarisation invariants].

data StgPprOpts Source #

STG pretty-printing options

Constructors

StgPprOpts |

Fields

- stgSccEnabled :: !Bool

  Enable cost-centres

panicStgPprOpts :: StgPprOpts Source #

STG pretty-printing options used for panic messages

shortStgPprOpts :: StgPprOpts Source #

STG pretty-printing options used for short messages

pprStgArg :: StgArg -> SDoc Source #

pprStgExpr :: OutputablePass pass => StgPprOpts -> GenStgExpr pass -> SDoc Source #

pprStgRhs :: OutputablePass pass => StgPprOpts -> GenStgRhs pass -> SDoc Source #

pprStgBinding :: OutputablePass pass => StgPprOpts -> GenStgBinding pass -> SDoc Source #

pprStgAlt :: OutputablePass pass => StgPprOpts -> Bool -> GenStgAlt pass -> SDoc Source #

pprGenStgTopBinding :: OutputablePass pass => StgPprOpts -> GenStgTopBinding pass -> SDoc Source #

pprStgTopBinding :: OutputablePass pass => StgPprOpts -> GenStgTopBinding pass -> SDoc Source #

pprGenStgTopBindings :: OutputablePass pass => StgPprOpts -> [GenStgTopBinding pass] -> SDoc Source #

pprStgTopBindings :: OutputablePass pass => StgPprOpts -> [GenStgTopBinding pass] -> SDoc Source #