ghc-9.2.1: The GHC API
Safe HaskellSafe-Inferred




type CAFSet = Set CAFLabel Source #

cafAnal :: Platform -> LabelSet -> CLabel -> CmmGraph -> CAFEnv Source #

For each code block: - collect the references reachable from this code block to FUN, THUNK or RET labels for which hasCAF == True

This gives us a CAFEnv: a mapping from code block to sets of labels

doSRTs :: DynFlags -> ModuleSRTInfo -> [(CAFEnv, [CmmDecl])] -> [(CAFSet, CmmDecl)] -> IO (ModuleSRTInfo, [CmmDeclSRTs]) Source #

Attach SRTs to all info tables in the CmmDecls, and add SRT declarations to the ModuleSRTInfo.

data ModuleSRTInfo Source #




  • thisModule :: Module

    Current module being compiled. Required for calling labelDynamic.

  • dedupSRTs :: Map (Set SRTEntry) SRTEntry

    previous SRTs we've emitted, so we can de-duplicate. Used to implement the [Common] optimisation.

  • flatSRTs :: Map SRTEntry (Set SRTEntry)

    The reverse mapping, so that we can remove redundant entries. e.g. if we have an SRT [a,b,c], and we know that b points to [c,d], we can omit c and emit [a,b]. Used to implement the [Filter] optimisation.

  • moduleSRTMap :: SRTMap


Instances details
OutputableP env CLabel => OutputableP env ModuleSRTInfo Source # 
Instance details

Defined in GHC.Cmm.Info.Build


pdoc :: env -> ModuleSRTInfo -> SDoc Source #

type SRTMap = Map CAFLabel (Maybe SRTEntry) Source #

Maps labels from cafAnal to the final CLabel that will appear in the SRT. - closures with singleton SRTs resolve to their single entry - closures with larger SRTs map to the label for that SRT - CAFs must not map to anything! - if a labels maps to Nothing, we found that this label's SRT is empty, so we don't need to refer to it from other SRTs.

srtMapNonCAFs :: SRTMap -> NonCaffySet Source #

Given SRTMap of a module, returns the set of non-CAFFY names in the module. Any Names not in the set are CAFFY.