- data CoreToDo
- = CoreDoSimplify SimplifierMode Int [SimplifierSwitch]
- | CoreDoFloatInwards
- | CoreDoFloatOutwards FloatOutSwitches
- | CoreLiberateCase
- | CoreDoPrintCore
- | CoreDoStaticArgs
- | CoreDoStrictness
- | CoreDoWorkerWrapper
- | CoreDoSpecialising
- | CoreDoSpecConstr
- | CoreDoGlomBinds
- | CoreCSE
- | CoreDoRuleCheck CompilerPhase String
- | CoreDoVectorisation PackageId
- | CoreDoNothing
- | CoreDoPasses [CoreToDo]
- | CoreDesugar
- | CoreTidy
- | CorePrep
- data SimplifierMode
- = SimplGently { }
- | SimplPhase { }
- data SimplifierSwitch = NoCaseOfCase
- data FloatOutSwitches = FloatOutSwitches {}
- getCoreToDo :: DynFlags -> [CoreToDo]
- dumpSimplPhase :: DynFlags -> SimplifierMode -> Bool
- data SimplCount
- doSimplTick :: Tick -> SimplCount -> SimplCount
- doFreeSimplTick :: Tick -> SimplCount -> SimplCount
- simplCountN :: SimplCount -> Int
- pprSimplCount :: SimplCount -> SDoc
- plusSimplCount :: SimplCount -> SimplCount -> SimplCount
- zeroSimplCount :: DynFlags -> SimplCount
- isZeroSimplCount :: SimplCount -> Bool
- data Tick
- = PreInlineUnconditionally Id
- | PostInlineUnconditionally Id
- | UnfoldingDone Id
- | RuleFired FastString
- | LetFloatFromLet
- | EtaExpansion Id
- | EtaReduction Id
- | BetaReduction Id
- | CaseOfCase Id
- | KnownBranch Id
- | CaseMerge Id
- | AltMerge Id
- | CaseElim Id
- | CaseIdentity Id
- | FillInCaseDefault Id
- | BottomFound
- | SimplifierDone
- data CoreM a
- runCoreM :: HscEnv -> RuleBase -> UniqSupply -> Module -> CoreM a -> IO (a, SimplCount)
- getHscEnv :: CoreM HscEnv
- getRuleBase :: CoreM RuleBase
- getModule :: CoreM Module
- getDynFlags :: CoreM DynFlags
- getOrigNameCache :: CoreM OrigNameCache
- addSimplCount :: SimplCount -> CoreM ()
- liftIO :: MonadIO m => IO a -> m a
- liftIOWithCount :: IO (SimplCount, a) -> CoreM a
- liftIO1 :: MonadIO m => (a -> IO b) -> a -> m b
- liftIO2 :: MonadIO m => (a -> b -> IO c) -> a -> b -> m c
- liftIO3 :: MonadIO m => (a -> b -> c -> IO d) -> a -> b -> c -> m d
- liftIO4 :: MonadIO m => (a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> m e
- getAnnotations :: Typeable a => ([Word8] -> a) -> ModGuts -> CoreM (UniqFM [a])
- getFirstAnnotations :: Typeable a => ([Word8] -> a) -> ModGuts -> CoreM (UniqFM a)
- showPass :: DynFlags -> CoreToDo -> IO ()
- endPass :: DynFlags -> CoreToDo -> [CoreBind] -> [CoreRule] -> IO ()
- endIteration :: DynFlags -> CoreToDo -> Int -> [CoreBind] -> [CoreRule] -> IO ()
- dumpIfSet :: Bool -> CoreToDo -> SDoc -> SDoc -> IO ()
- putMsg :: SDoc -> CoreM ()
- putMsgS :: String -> CoreM ()
- errorMsg :: SDoc -> CoreM ()
- errorMsgS :: String -> CoreM ()
- fatalErrorMsg :: SDoc -> CoreM ()
- fatalErrorMsgS :: String -> CoreM ()
- debugTraceMsg :: SDoc -> CoreM ()
- debugTraceMsgS :: String -> CoreM ()
- dumpIfSet_dyn :: DynFlag -> String -> SDoc -> CoreM ()
- thNameToGhcName :: Name -> CoreM (Maybe Name)
Configuration of the core-to-core passes
data FloatOutSwitches Source
FloatOutSwitches | |
|
getCoreToDo :: DynFlags -> [CoreToDo]Source
Switches that specify the minimum amount of floating out gentleFloatOutSwitches :: FloatOutSwitches gentleFloatOutSwitches = FloatOutSwitches False False
dumpSimplPhase :: DynFlags -> SimplifierMode -> BoolSource
Counting
data SimplCount Source
doSimplTick :: Tick -> SimplCount -> SimplCountSource
doFreeSimplTick :: Tick -> SimplCount -> SimplCountSource
simplCountN :: SimplCount -> IntSource
The monad
The monad used by Core-to-Core passes to access common state, register simplification statistics and so on
runCoreM :: HscEnv -> RuleBase -> UniqSupply -> Module -> CoreM a -> IO (a, SimplCount)Source
Reading from the monad
Writing to the monad
addSimplCount :: SimplCount -> CoreM ()Source
Lifting into the monad
liftIOWithCount :: IO (SimplCount, a) -> CoreM aSource
Lift an IO
operation into CoreM
while consuming its SimplCount
liftIO1 :: MonadIO m => (a -> IO b) -> a -> m bSource
Lift an IO
operation with 1 argument into another monad
liftIO2 :: MonadIO m => (a -> b -> IO c) -> a -> b -> m cSource
Lift an IO
operation with 2 arguments into another monad
liftIO3 :: MonadIO m => (a -> b -> c -> IO d) -> a -> b -> c -> m dSource
Lift an IO
operation with 3 arguments into another monad
liftIO4 :: MonadIO m => (a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> m eSource
Lift an IO
operation with 4 arguments into another monad
Dealing with annotations
getAnnotations :: Typeable a => ([Word8] -> a) -> ModGuts -> CoreM (UniqFM [a])Source
Get all annotations of a given type. This happens lazily, that is no deserialization will take place until the [a] is actually demanded and the [a] can also be empty (the UniqFM is not filtered).
This should be done once at the start of a Core-to-Core pass that uses annotations.
See Note [Annotations]
getFirstAnnotations :: Typeable a => ([Word8] -> a) -> ModGuts -> CoreM (UniqFM a)Source
Get at most one annotation of a given type per Unique.
Debug output
Screen output
fatalErrorMsg :: SDoc -> CoreM ()Source
Output a fatal error to the screen. Note this does not by itself cause the compiler to die
fatalErrorMsgS :: String -> CoreM ()Source
Output a fatal string error to the screen. Note this does not by itself cause the compiler to die
debugTraceMsg :: SDoc -> CoreM ()Source
Outputs a debugging message at verbosity level of -v
or higher
debugTraceMsgS :: String -> CoreM ()Source
Output a string debugging message at verbosity level of -v
or higher
dumpIfSet_dyn :: DynFlag -> String -> SDoc -> CoreM ()Source
Show some labelled SDoc
if a particular flag is set or at a verbosity level of -v -ddump-most
or higher
Getting Name
s
thNameToGhcName :: Name -> CoreM (Maybe Name)Source
Attempt to convert a Template Haskell name to one that GHC can
understand. Original TH names such as those you get when you use
the 'foo
syntax will be translated to their equivalent GHC name
exactly. Qualified or unqualifed TH names will be dynamically bound
to names in the module being compiled, if possible. Exact TH names
will be bound to the name they represent, exactly.