futhark
Safe HaskellNone
LanguageGHC2021

Futhark.Pass.Flatten.Monad

Description

General definitions for the flattening transformation.

Defines not just the core monads that are involved, but also the various representations, except perhaps the ones that are completely local to another module.

Synopsis

Documentation

data IrregularKind Source #

Constructors

Dense 
Replicated 

Instances

Instances details
Show IrregularKind Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Eq IrregularKind Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

data IrregularRep Source #

Constructors

IrregularRep 

Fields

Instances

Instances details
Show IrregularRep Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

data ResRep Source #

Constructors

Regular VName

This variable is represented completely straightforwardly- if it is an array, it is a regular array.

Irregular IrregularRep

The representation of an irregular array.

Instances

Instances details
Show ResRep Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

newtype DistEnv Source #

Constructors

DistEnv 

Instances

Instances details
Monoid DistEnv Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Semigroup DistEnv Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

data FlattenOps Source #

Functions for tying together disparate modules - this is to avoid mutually recursive modules.

Constructors

FlattenOps 

Fields

Flattening monad

data FlattenM a Source #

Instances

Instances details
MonadBuilder FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Associated Types

type Rep FlattenM 
Instance details

Defined in Futhark.Pass.Flatten.Monad

MonadFreshNames FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Applicative FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Methods

pure :: a -> FlattenM a #

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

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

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

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

Functor FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Methods

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

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

Monad FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Methods

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

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

return :: a -> FlattenM a #

HasScope GPU FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

LocalScope GPU FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

MonadState FlattenState FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

type Rep FlattenM Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

runFlattenM :: MonadFreshNames m => Scope GPU -> FlattenM a -> m (a, Set DemandFn) Source #

Do not nest these - the counter for thresholds will be wrong.

Demands

data BuiltinFn Source #

A representation of the different kinds of builtin functions we can generate. This is used to only generate the ones we actually need for a given program.

data LiftMode Source #

Instances

Instances details
Show LiftMode Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Eq LiftMode Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Ord LiftMode Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

data DemandFn Source #

Indicate the need for a function to be generated. Instead of immediately generating them ourselves, we collect requirements from multiple flattening operations and satisfy them in their entirety.

Constructors

DemandLifted Name LiftMode

We need this function to be lifted.

DemandBuiltin BuiltinFn 

Instances

Instances details
Show DemandFn Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Eq DemandFn Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

Ord DemandFn Source # 
Instance details

Defined in Futhark.Pass.Flatten.Monad

demandLifted :: Name -> LiftMode -> FlattenM () Source #

Indicate that we rather need a lifted version of this function.

demandBuiltin :: BuiltinFn -> FlattenM () Source #

Demand the presence of this builtin function.

Insertions

Various

inputReps :: DistInputs -> DistEnv -> Map VName (Type, ResRep) Source #

Mapping from original variable names to their distributed resreps.