futhark-0.21.13: An optimising compiler for a functional, array-oriented language.
Safe HaskellNone
LanguageHaskell2010

Futhark.IR.Aliases

Description

A representation where all patterns are annotated with aliasing information. It also records consumption of variables in bodies.

Note that this module is mostly not concerned with actually computing the aliasing information; only with shuffling it around and providing some basic building blocks. See modules such as Futhark.Analysis.Alias for computing the aliases in the first place.

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 (LetDec (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 (LetDec (Aliases rep)) Source #

mkExpDec :: Pat (LetDec (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 (LetDec (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.IR.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

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

Augment a body decoration with aliasing information provided by the statements and result of that body.

mkAliasedPat :: (Aliased rep, Typed dec) => Pat dec -> Exp rep -> Pat (VarAliases, dec) Source #

Augment a pattern with aliasing information provided by the expression the pattern is bound to.

mkBodyAliasing :: Aliased rep => Stms rep -> Result -> BodyAliasing Source #

Given statements (with aliasing information) and a body result, produce aliasing information for the corresponding body as a whole. This is basically just looking up the aliasing of each element of the result, and removing the names that are no longer in scope. Note that this does *not* include aliases of results that are not bound in the statements!

Removing aliases

removeProgAliases :: CanBeAliased (Op rep) => Prog (Aliases rep) -> Prog rep Source #

Remove alias information from a program.

removeFunDefAliases :: CanBeAliased (Op rep) => FunDef (Aliases rep) -> FunDef rep Source #

Remove alias information from a function.

removeExpAliases :: CanBeAliased (Op rep) => Exp (Aliases rep) -> Exp rep Source #

Remove alias information from an expression.

removeStmAliases :: CanBeAliased (Op rep) => Stm (Aliases rep) -> Stm rep Source #

Remove alias information from statements.

removeBodyAliases :: CanBeAliased (Op rep) => Body (Aliases rep) -> Body rep Source #

Remove alias information from body.

removeLambdaAliases :: CanBeAliased (Op rep) => Lambda (Aliases rep) -> Lambda rep Source #

Remove alias information from lambda.

removePatAliases :: Pat (AliasDec, a) -> Pat a Source #

Remove alias information from pattern.

removeScopeAliases :: Scope (Aliases rep) -> Scope rep Source #

Remove alias information from an aliased scope.

Tracking aliases

type AliasesAndConsumed = (Map VName Names, Names) Source #

A tuple of a mapping from variable names to their aliases, and the names of consumed variables.

trackAliases :: Aliased rep => AliasesAndConsumed -> Stm rep -> AliasesAndConsumed Source #

A helper function for computing the aliases of a sequence of statements. You'd use this while recursing down the statements from first to last. The AliasesAndConsumed parameter is the current "state" of aliasing, and the function then returns a new state. The main thing this function provides is proper handling of transitivity and "reverse" aliases.

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

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

consumedInStms :: Aliased rep => Stms rep -> Names Source #

The variables consumed in these statements.