futhark-0.25.15: An optimising compiler for a functional, array-oriented language.
Safe HaskellSafe-Inferred
LanguageGHC2021

Futhark.Pass

Description

Definition of a polymorphic (generic) pass that can work with programs of any rep.

Synopsis

Documentation

data PassM a Source #

The monad in which passes execute.

Instances

Instances details
Applicative PassM Source # 
Instance details

Defined in Futhark.Pass

Methods

pure :: a -> PassM a #

(<*>) :: PassM (a -> b) -> PassM a -> PassM b #

liftA2 :: (a -> b -> c) -> PassM a -> PassM b -> PassM c #

(*>) :: PassM a -> PassM b -> PassM b #

(<*) :: PassM a -> PassM b -> PassM a #

Functor PassM Source # 
Instance details

Defined in Futhark.Pass

Methods

fmap :: (a -> b) -> PassM a -> PassM b #

(<$) :: a -> PassM b -> PassM a #

Monad PassM Source # 
Instance details

Defined in Futhark.Pass

Methods

(>>=) :: PassM a -> (a -> PassM b) -> PassM b #

(>>) :: PassM a -> PassM b -> PassM b #

return :: a -> PassM a #

MonadFreshNames PassM Source # 
Instance details

Defined in Futhark.Pass

MonadLogger PassM Source # 
Instance details

Defined in Futhark.Pass

Methods

logMsg :: ToLog a => a -> PassM () Source #

addLog :: Log -> 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 #

A compiler pass transforming a Prog of a given rep to a Prog of another rep.

Constructors

Pass 

Fields

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.