CoreUnfold

ghc-8.4.4: The GHC API

Safe Haskell | None
Language | Haskell2010

CoreUnfold

Synopsis

- data Unfolding
- data UnfoldingGuidance
- noUnfolding :: Unfolding
- mkImplicitUnfolding :: DynFlags -> CoreExpr -> Unfolding
- mkUnfolding :: DynFlags -> UnfoldingSource -> Bool -> Bool -> CoreExpr -> Unfolding
- mkCoreUnfolding :: UnfoldingSource -> Bool -> CoreExpr -> UnfoldingGuidance -> Unfolding
- mkTopUnfolding :: DynFlags -> Bool -> CoreExpr -> Unfolding
- mkSimpleUnfolding :: DynFlags -> CoreExpr -> Unfolding
- mkWorkerUnfolding :: DynFlags -> (CoreExpr -> CoreExpr) -> Unfolding -> Unfolding
- mkInlineUnfolding :: CoreExpr -> Unfolding
- mkInlineUnfoldingWithArity :: Arity -> CoreExpr -> Unfolding
- mkInlinableUnfolding :: DynFlags -> CoreExpr -> Unfolding
- mkWwInlineRule :: CoreExpr -> Arity -> Unfolding
- mkCompulsoryUnfolding :: CoreExpr -> Unfolding
- mkDFunUnfolding :: [Var] -> DataCon -> [CoreExpr] -> Unfolding
- specUnfolding :: [Var] -> (CoreExpr -> CoreExpr) -> Arity -> Unfolding -> Unfolding
- data ArgSummary
  - = TrivArg
  - | NonTrivArg
  - | ValueArg
- couldBeSmallEnoughToInline :: DynFlags -> Int -> CoreExpr -> Bool
- inlineBoringOk :: CoreExpr -> Bool
- certainlyWillInline :: DynFlags -> IdInfo -> Maybe Unfolding
- smallEnoughToInline :: DynFlags -> Unfolding -> Bool
- callSiteInline :: DynFlags -> Id -> Bool -> Bool -> [ArgSummary] -> CallCtxt -> Maybe CoreExpr
- data CallCtxt
  - = BoringCtxt
  - | RhsCtxt
  - | DiscArgCtxt
  - | RuleArgCtxt
  - | ValAppCtxt
  - | CaseCtxt
- exprIsConApp_maybe :: InScopeEnv -> CoreExpr -> Maybe (DataCon, [Type], [CoreExpr])
- exprIsLiteral_maybe :: InScopeEnv -> CoreExpr -> Maybe Literal

# Documentation

data Unfolding Source #

Records the unfolding of an identifier, which is approximately the form the identifier would have if we substituted its definition in for the identifier. This type should be treated as abstract everywhere except in CoreUnfold

Instances

Outputable Unfolding Source # |
Instance details Defined in PprCore Methods ppr :: Unfolding -> SDoc Source # pprPrec :: Rational -> Unfolding -> SDoc Source #

data UnfoldingGuidance Source #

`UnfoldingGuidance` says when unfolding should take place

Instances

Eq UnfoldingGuidance Source # |
Instance details Defined in CoreSyn Methods (==) :: UnfoldingGuidance -> UnfoldingGuidance -> Bool # (/=) :: UnfoldingGuidance -> UnfoldingGuidance -> Bool #
Outputable UnfoldingGuidance Source # |
Instance details Defined in PprCore Methods ppr :: UnfoldingGuidance -> SDoc Source # pprPrec :: Rational -> UnfoldingGuidance -> SDoc Source #

noUnfolding :: Unfolding Source #

There is no known `Unfolding`

mkImplicitUnfolding :: DynFlags -> CoreExpr -> Unfolding Source #

mkUnfolding :: DynFlags -> UnfoldingSource -> Bool -> Bool -> CoreExpr -> Unfolding Source #

mkCoreUnfolding :: UnfoldingSource -> Bool -> CoreExpr -> UnfoldingGuidance -> Unfolding Source #

mkTopUnfolding :: DynFlags -> Bool -> CoreExpr -> Unfolding Source #

mkSimpleUnfolding :: DynFlags -> CoreExpr -> Unfolding Source #

mkWorkerUnfolding :: DynFlags -> (CoreExpr -> CoreExpr) -> Unfolding -> Unfolding Source #

mkInlineUnfolding :: CoreExpr -> Unfolding Source #

Make an unfolding that may be used unsaturated (ug_unsat_ok = unSaturatedOk) and that is reported as having its manifest arity (the number of outer lambdas applications will resolve before doing any work).

mkInlineUnfoldingWithArity :: Arity -> CoreExpr -> Unfolding Source #

Make an unfolding that will be used once the RHS has been saturated to the given arity.

mkInlinableUnfolding :: DynFlags -> CoreExpr -> Unfolding Source #

mkWwInlineRule :: CoreExpr -> Arity -> Unfolding Source #

mkCompulsoryUnfolding :: CoreExpr -> Unfolding Source #

mkDFunUnfolding :: [Var] -> DataCon -> [CoreExpr] -> Unfolding Source #

specUnfolding :: [Var] -> (CoreExpr -> CoreExpr) -> Arity -> Unfolding -> Unfolding Source #

data ArgSummary Source #

Constructors

TrivArg |
NonTrivArg |
ValueArg |

Instances

Outputable ArgSummary Source # |
Instance details Defined in CoreUnfold Methods ppr :: ArgSummary -> SDoc Source # pprPrec :: Rational -> ArgSummary -> SDoc Source #

couldBeSmallEnoughToInline :: DynFlags -> Int -> CoreExpr -> Bool Source #

inlineBoringOk :: CoreExpr -> Bool Source #

certainlyWillInline :: DynFlags -> IdInfo -> Maybe Unfolding Source #

smallEnoughToInline :: DynFlags -> Unfolding -> Bool Source #

callSiteInline :: DynFlags -> Id -> Bool -> Bool -> [ArgSummary] -> CallCtxt -> Maybe CoreExpr Source #

data CallCtxt Source #

Constructors

BoringCtxt |
RhsCtxt |
DiscArgCtxt |
RuleArgCtxt |
ValAppCtxt |
CaseCtxt |

Instances

Outputable CallCtxt Source # |
Instance details Defined in CoreUnfold Methods ppr :: CallCtxt -> SDoc Source # pprPrec :: Rational -> CallCtxt -> SDoc Source #

exprIsConApp_maybe :: InScopeEnv -> CoreExpr -> Maybe (DataCon, [Type], [CoreExpr]) Source #

Returns `Just (dc, [t1..tk], [x1..xn])` if the argument expression is a *saturated* constructor application of the form `dc t1..tk x1 .. xn`, where t1..tk are the *universally-quantified* type args of `dc`

exprIsLiteral_maybe :: InScopeEnv -> CoreExpr -> Maybe Literal Source #