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

Futhark.IR.Aliases

Description

A representation where all bindings are annotated with aliasing information.

Synopsis

The representation definition

data Aliases rep Source #

The rep for the basic representation.

Instances

Instances details
(RepTypes rep, CanBeAliased (Op rep)) => RepTypes (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

Associated Types

type LetDec (Aliases rep) Source #

type ExpDec (Aliases rep) Source #

type BodyDec (Aliases rep) Source #

type FParamInfo (Aliases rep) Source #

type LParamInfo (Aliases rep) Source #

type RetType (Aliases rep) Source #

type BranchType (Aliases rep) Source #

type Op (Aliases rep) Source #

(ASTRep rep, CanBeAliased (Op rep)) => PrettyRep (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

ppExpDec :: ExpDec (Aliases rep) -> Exp (Aliases rep) -> Maybe Doc Source #

(ASTRep rep, CanBeAliased (Op rep)) => ASTRep (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

expTypesFromPat :: (HasScope (Aliases rep) m, Monad m) => Pat (Aliases rep) -> m [BranchType (Aliases rep)] Source #

(ASTRep rep, CanBeAliased (Op rep)) => Aliased (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

(Buildable rep, CanBeAliased (Op rep)) => Buildable (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

mkExpPat :: [Ident] -> Exp (Aliases rep) -> Pat (Aliases rep) Source #

mkExpDec :: Pat (Aliases rep) -> Exp (Aliases rep) -> ExpDec (Aliases rep) Source #

mkBody :: Stms (Aliases rep) -> Result -> Body (Aliases rep) Source #

mkLetNames :: (MonadFreshNames m, HasScope (Aliases rep) m) => [VName] -> Exp (Aliases rep) -> m (Stm (Aliases rep)) Source #

(ASTRep (Aliases rep), Buildable (Aliases rep)) => BuilderOps (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

mkExpDecB :: (MonadBuilder m, Rep m ~ Aliases rep) => Pat (Aliases rep) -> Exp (Aliases rep) -> m (ExpDec (Aliases rep)) Source #

mkBodyB :: (MonadBuilder m, Rep m ~ Aliases rep) => Stms (Aliases rep) -> Result -> m (Body (Aliases rep)) Source #

mkLetNamesB :: (MonadBuilder m, Rep m ~ Aliases rep) => [VName] -> Exp (Aliases rep) -> m (Stm (Aliases rep)) Source #

(ASTRep rep, CanBeAliased (Op rep), CSEInOp (OpWithAliases (Op rep))) => CSEInOp (SOAC (Aliases rep)) Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: SOAC (Aliases rep) -> CSEM rep0 (SOAC (Aliases rep))

Checkable rep => HasScope (Aliases rep) (TypeM rep) Source # 
Instance details

Defined in Futhark.TypeCheck

Methods

lookupType :: VName -> TypeM rep Type Source #

lookupInfo :: VName -> TypeM rep (NameInfo (Aliases rep)) Source #

askScope :: TypeM rep (Scope (Aliases rep)) Source #

asksScope :: (Scope (Aliases rep) -> a) -> TypeM rep a Source #

type LetDec (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type LetDec (Aliases rep) = (VarAliases, LetDec rep)
type ExpDec (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type ExpDec (Aliases rep) = (ConsumedInExp, ExpDec rep)
type BodyDec (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type BodyDec (Aliases rep) = (BodyAliasing, BodyDec rep)
type FParamInfo (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type FParamInfo (Aliases rep) = FParamInfo rep
type LParamInfo (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type LParamInfo (Aliases rep) = LParamInfo rep
type RetType (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type RetType (Aliases rep) = RetType rep
type BranchType (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type BranchType (Aliases rep) = BranchType rep
type Op (Aliases rep) Source # 
Instance details

Defined in Futhark.IR.Aliases

type Op (Aliases rep) = OpWithAliases (Op rep)

newtype AliasDec Source #

A wrapper around AliasDec to get around the fact that we need an Ord instance, which 'AliasDec does not have.

Constructors

AliasDec 

Fields

Instances

Instances details
Eq AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Ord AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Show AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Semigroup AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Monoid AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Pretty AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

ppr :: AliasDec -> Doc #

pprPrec :: Int -> AliasDec -> Doc #

pprList :: [AliasDec] -> Doc #

FreeDec AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

precomputed :: AliasDec -> FV -> FV Source #

FreeIn AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

freeIn' :: AliasDec -> FV Source #

Substitute AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

Rename AliasDec Source # 
Instance details

Defined in Futhark.IR.Aliases

AliasesOf (VarAliases, dec) Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

aliasesOf :: (VarAliases, dec) -> Names Source #

type VarAliases = AliasDec Source #

The aliases of the let-bound variable.

type ConsumedInExp = AliasDec Source #

Everything consumed in the expression.

type BodyAliasing = ([VarAliases], ConsumedInExp) Source #

The aliases of what is returned by the Body, and what is consumed inside of it.

Module re-exports

Adding aliases

addAliasesToPat :: (ASTRep rep, CanBeAliased (Op rep), Typed dec) => PatT dec -> Exp (Aliases rep) -> PatT (VarAliases, dec) Source #

mkAliasedLetStm :: (ASTRep rep, CanBeAliased (Op rep)) => Pat rep -> StmAux (ExpDec rep) -> Exp (Aliases rep) -> Stm (Aliases rep) Source #

mkAliasedBody :: (ASTRep rep, CanBeAliased (Op rep)) => BodyDec rep -> Stms (Aliases rep) -> Result -> Body (Aliases rep) Source #

mkPatAliases :: (Aliased rep, Typed dec) => PatT dec -> Exp rep -> [PatElemT (VarAliases, dec)] Source #

Removing aliases

Tracking aliases

mkStmsAliases :: Aliased rep => Stms rep -> Result -> ([Names], Names) Source #

The aliases of the result and everything consumed in the given statements.