Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
A representation where all bindings are annotated with aliasing information.
Synopsis
- data Aliases rep
- newtype AliasDec = AliasDec {}
- type VarAliases = AliasDec
- type ConsumedInExp = AliasDec
- type BodyAliasing = ([VarAliases], ConsumedInExp)
- module Futhark.IR.Prop.Aliases
- module Futhark.IR.Prop
- module Futhark.IR.Traversals
- module Futhark.IR.Pretty
- module Futhark.IR.Syntax
- addAliasesToPat :: (ASTRep rep, CanBeAliased (Op rep), Typed dec) => PatT dec -> Exp (Aliases rep) -> PatT (VarAliases, dec)
- mkAliasedLetStm :: (ASTRep rep, CanBeAliased (Op rep)) => Pat rep -> StmAux (ExpDec rep) -> Exp (Aliases rep) -> Stm (Aliases rep)
- mkAliasedBody :: (ASTRep rep, CanBeAliased (Op rep)) => BodyDec rep -> Stms (Aliases rep) -> Result -> Body (Aliases rep)
- mkPatAliases :: (Aliased rep, Typed dec) => PatT dec -> Exp rep -> [PatElemT (VarAliases, dec)]
- mkBodyAliases :: Aliased rep => Stms rep -> Result -> BodyAliasing
- removeProgAliases :: CanBeAliased (Op rep) => Prog (Aliases rep) -> Prog rep
- removeFunDefAliases :: CanBeAliased (Op rep) => FunDef (Aliases rep) -> FunDef rep
- removeExpAliases :: CanBeAliased (Op rep) => Exp (Aliases rep) -> Exp rep
- removeStmAliases :: CanBeAliased (Op rep) => Stm (Aliases rep) -> Stm rep
- removeLambdaAliases :: CanBeAliased (Op rep) => Lambda (Aliases rep) -> Lambda rep
- removePatAliases :: PatT (AliasDec, a) -> PatT a
- removeScopeAliases :: Scope (Aliases rep) -> Scope rep
- type AliasesAndConsumed = (Map VName Names, Names)
- trackAliases :: Aliased rep => AliasesAndConsumed -> Stm rep -> AliasesAndConsumed
- mkStmsAliases :: Aliased rep => Stms rep -> Result -> ([Names], Names)
The representation definition
The rep for the basic representation.
Instances
A wrapper around AliasDec
to get around the fact that we need an
Ord
instance, which 'AliasDec does not have.
Instances
Eq AliasDec Source # | |
Ord AliasDec Source # | |
Defined in Futhark.IR.Aliases | |
Show AliasDec Source # | |
Semigroup AliasDec Source # | |
Monoid AliasDec Source # | |
Pretty AliasDec Source # | |
FreeDec AliasDec Source # | |
Defined in Futhark.IR.Aliases | |
FreeIn AliasDec Source # | |
Substitute AliasDec Source # | |
Defined in Futhark.IR.Aliases | |
Rename AliasDec Source # | |
AliasesOf (VarAliases, dec) Source # | |
Defined in Futhark.IR.Aliases 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 Futhark.IR.Prop.Aliases
Module re-exports
module Futhark.IR.Prop
module Futhark.IR.Traversals
module Futhark.IR.Pretty
module Futhark.IR.Syntax
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 #
mkBodyAliases :: Aliased rep => Stms rep -> Result -> BodyAliasing Source #
Removing aliases
removeProgAliases :: CanBeAliased (Op rep) => Prog (Aliases rep) -> Prog rep Source #
removeFunDefAliases :: CanBeAliased (Op rep) => FunDef (Aliases rep) -> FunDef rep Source #
removeExpAliases :: CanBeAliased (Op rep) => Exp (Aliases rep) -> Exp rep Source #
removeStmAliases :: CanBeAliased (Op rep) => Stm (Aliases rep) -> Stm rep Source #
removeLambdaAliases :: CanBeAliased (Op rep) => Lambda (Aliases rep) -> Lambda rep Source #
Tracking aliases
trackAliases :: Aliased rep => AliasesAndConsumed -> Stm rep -> AliasesAndConsumed Source #