Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Definition of a polymorphic (generic) pass that can work with programs of any rep.
Synopsis
- data PassM a
- runPassM :: MonadFreshNames m => PassM a -> m (a, Log)
- data Pass fromrep torep = Pass {
- passName :: String
- passDescription :: String
- passFunction :: Prog fromrep -> PassM (Prog torep)
- passLongOption :: Pass fromrep torep -> String
- parPass :: (a -> PassM b) -> [a] -> PassM [b]
- intraproceduralTransformation :: (Scope rep -> Stms rep -> PassM (Stms rep)) -> Prog rep -> PassM (Prog rep)
- intraproceduralTransformationWithConsts :: (Stms fromrep -> PassM (Stms torep)) -> (Stms torep -> FunDef fromrep -> PassM (FunDef torep)) -> Prog fromrep -> PassM (Prog torep)
Documentation
The monad in which passes execute.
Instances
Applicative PassM Source # | |
Functor PassM Source # | |
Monad PassM Source # | |
MonadFreshNames PassM Source # | |
Defined in Futhark.Pass getNameSource :: PassM VNameSource Source # putNameSource :: VNameSource -> PassM () Source # | |
MonadLogger PassM Source # | |
runPassM :: MonadFreshNames m => PassM a -> m (a, Log) Source #
Execute a PassM
action, yielding logging information and either
an error pretty or a result.
data Pass fromrep torep Source #
Pass | |
|
passLongOption :: Pass fromrep torep -> String Source #
Take the name of the pass, turn spaces into dashes, and make all characters lowercase.
parPass :: (a -> PassM b) -> [a] -> PassM [b] Source #
Apply a PassM
operation in parallel to multiple elements,
joining together the name sources and logs, and propagating any
error properly.
intraproceduralTransformation :: (Scope rep -> Stms rep -> PassM (Stms rep)) -> Prog rep -> PassM (Prog rep) Source #
Like intraproceduralTransformationWithConsts
, but do not change
the top-level constants, and simply pass along their Scope
.
intraproceduralTransformationWithConsts :: (Stms fromrep -> PassM (Stms torep)) -> (Stms torep -> FunDef fromrep -> PassM (FunDef torep)) -> Prog fromrep -> PassM (Prog torep) Source #
Apply some operation to the top-level constants. Then applies an
operation to all the function definitions, which are also given the
transformed constants so they can be brought into scope.
The function definition transformations are run in parallel (with
parPass
), since they cannot affect each other.