ghc-9.10.3: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Core.Unfold

Synopsis

- data Unfolding
- data UnfoldingGuidance
- data ExprSize
  - = TooBig
  - | SizeIs {
    - _es_size_is :: !Int
    - _es_args :: !(Bag (Id, Int))
    - _es_discount :: !Int
    }
- sizeExpr :: UnfoldingOpts -> Int -> [Id] -> CoreExpr -> ExprSize
- data ArgSummary
  - = TrivArg
  - | NonTrivArg
  - | ValueArg
- nonTriv :: ArgSummary -> Bool
- data CallCtxt
  - = BoringCtxt
  - | RhsCtxt RecFlag
  - | DiscArgCtxt
  - | RuleArgCtxt
  - | ValAppCtxt
  - | CaseCtxt
- data UnfoldingOpts = UnfoldingOpts {
  - unfoldingCreationThreshold :: !Int
  - unfoldingUseThreshold :: !Int
  - unfoldingFunAppDiscount :: !Int
  - unfoldingDictDiscount :: !Int
  - unfoldingVeryAggressive :: !Bool
  - unfoldingCaseThreshold :: !Int
  - unfoldingCaseScaling :: !Int
  - unfoldingReportPrefix :: !(Maybe String)
  }
- defaultUnfoldingOpts :: UnfoldingOpts
- updateCreationThreshold :: Int -> UnfoldingOpts -> UnfoldingOpts
- updateUseThreshold :: Int -> UnfoldingOpts -> UnfoldingOpts
- updateFunAppDiscount :: Int -> UnfoldingOpts -> UnfoldingOpts
- updateDictDiscount :: Int -> UnfoldingOpts -> UnfoldingOpts
- updateVeryAggressive :: Bool -> UnfoldingOpts -> UnfoldingOpts
- updateCaseScaling :: Int -> UnfoldingOpts -> UnfoldingOpts
- updateCaseThreshold :: Int -> UnfoldingOpts -> UnfoldingOpts
- updateReportPrefix :: Maybe String -> UnfoldingOpts -> UnfoldingOpts
- inlineBoringOk :: CoreExpr -> Bool
- calcUnfoldingGuidance :: UnfoldingOpts -> Bool -> CoreExpr -> UnfoldingGuidance

# 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 GHC.Core.Unfold

#### Instances

Instances details

Outputable Unfolding Source # |
Instance details Defined in GHC.Core.Ppr Methods ppr :: Unfolding -> SDoc Source #

data UnfoldingGuidance Source #

`UnfoldingGuidance` says when unfolding should take place

#### Instances

Instances details

Outputable UnfoldingGuidance Source # |
Instance details Defined in GHC.Core.Ppr Methods ppr :: UnfoldingGuidance -> SDoc Source #
Eq UnfoldingGuidance Source # |
Instance details Defined in GHC.Core Methods (==) :: UnfoldingGuidance -> UnfoldingGuidance -> Bool # (/=) :: UnfoldingGuidance -> UnfoldingGuidance -> Bool #

data ExprSize Source #

The size of a candidate expression for unfolding

Constructors

TooBig |
SizeIs |

Fields

- _es_size_is :: !Int

  Size found

- _es_args :: !(Bag (Id, Int))

  Arguments cased herein, and discount for each such

- _es_discount :: !Int

  Size to subtract if result is scrutinised by a case expression

#### Instances

Instances details

Outputable ExprSize Source # |
Instance details Defined in GHC.Core.Unfold Methods ppr :: ExprSize -> SDoc Source #

sizeExpr :: UnfoldingOpts -> Int -> [Id] -> CoreExpr -> ExprSize Source #

data ArgSummary Source #

Constructors

TrivArg |
NonTrivArg |
ValueArg |

#### Instances

Instances details

Outputable ArgSummary Source # |
Instance details Defined in GHC.Core.Unfold Methods ppr :: ArgSummary -> SDoc Source #

nonTriv :: ArgSummary -> Bool Source #

data CallCtxt Source #

Constructors

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

#### Instances

Instances details

Outputable CallCtxt Source # |
Instance details Defined in GHC.Core.Unfold Methods ppr :: CallCtxt -> SDoc Source #

data UnfoldingOpts Source #

Unfolding options

Constructors

UnfoldingOpts |

Fields

- unfoldingCreationThreshold :: !Int

  Threshold above which unfoldings are not *created*

- unfoldingUseThreshold :: !Int

  Threshold above which unfoldings are not *inlined*

- unfoldingFunAppDiscount :: !Int

  Discount for lambdas that are used (applied)

- unfoldingDictDiscount :: !Int

  Discount for dictionaries

- unfoldingVeryAggressive :: !Bool

  Force inlining in many more cases

- unfoldingCaseThreshold :: !Int

  Don't consider depth up to x

- unfoldingCaseScaling :: !Int

  Penalize depth with 1/x

- unfoldingReportPrefix :: !(Maybe String)

  Only report inlining decisions for names with this prefix

defaultUnfoldingOpts :: UnfoldingOpts Source #

updateCreationThreshold :: Int -> UnfoldingOpts -> UnfoldingOpts Source #

updateUseThreshold :: Int -> UnfoldingOpts -> UnfoldingOpts Source #

updateFunAppDiscount :: Int -> UnfoldingOpts -> UnfoldingOpts Source #

updateDictDiscount :: Int -> UnfoldingOpts -> UnfoldingOpts Source #

updateVeryAggressive :: Bool -> UnfoldingOpts -> UnfoldingOpts Source #

updateCaseScaling :: Int -> UnfoldingOpts -> UnfoldingOpts Source #

updateCaseThreshold :: Int -> UnfoldingOpts -> UnfoldingOpts Source #

updateReportPrefix :: Maybe String -> UnfoldingOpts -> UnfoldingOpts Source #

inlineBoringOk :: CoreExpr -> Bool Source #

calcUnfoldingGuidance :: UnfoldingOpts -> Bool -> CoreExpr -> UnfoldingGuidance Source #