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

Futhark.IR.Prop.Aliases

Description

The IR tracks aliases, mostly to ensure the soundness of in-place updates, but it can also be used for other things (such as memory optimisations). This module contains the raw building blocks for determining the aliases of the values produced by expressions. It also contains some building blocks for inspecting consumption.

One important caveat is that all aliases computed here are local. Thus, they do not take aliases-of-aliases into account. See Futhark.Analysis.Alias if this is not what you want.

Synopsis

Documentation

subExpAliases :: SubExp -> Names Source #

The alises of a subexpression.

expAliases :: Aliased rep => Exp rep -> [Names] Source #

The aliases of an expression, one per non-context value returned.

patAliases :: AliasesOf dec => PatT dec -> [Names] Source #

The aliases of each pattern element (including the context).

lookupAliases :: AliasesOf (LetDec rep) => VName -> Scope rep -> Names Source #

Also includes the name itself.

class (RepTypes rep, AliasedOp (Op rep), AliasesOf (LetDec rep)) => Aliased rep where Source #

The class of representations that contain aliasing information.

Methods

bodyAliases :: Body rep -> [Names] Source #

The aliases of the body results.

consumedInBody :: Body rep -> Names Source #

The variables consumed in the body.

Instances

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

Defined in Futhark.IR.Aliases

(ASTRep rep, CanBeWise (Op rep)) => Aliased (Wise rep) Source # 
Instance details

Defined in Futhark.Optimise.Simplify.Rep

class AliasesOf a where Source #

Something that contains alias information.

Methods

aliasesOf :: a -> Names Source #

The alias of the argument element.

Instances

Instances details
AliasesOf Names Source # 
Instance details

Defined in Futhark.IR.Prop.Aliases

AliasesOf dec => AliasesOf (PatElemT dec) Source # 
Instance details

Defined in Futhark.IR.Prop.Aliases

Methods

aliasesOf :: PatElemT dec -> Names Source #

AliasesOf (VarAliases, dec) Source # 
Instance details

Defined in Futhark.IR.Aliases

Methods

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

AliasesOf (VarWisdom, dec) Source # 
Instance details

Defined in Futhark.Optimise.Simplify.Rep

Methods

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

Consumption

consumedInStm :: Aliased rep => Stm rep -> Names Source #

The variables consumed in this statement.

consumedInExp :: Aliased rep => Exp rep -> Names Source #

The variables consumed in this expression.

consumedByLambda :: Aliased rep => Lambda rep -> Names Source #

The variables consumed by this lambda.

Extensibility

type AliasTable = Map VName Names Source #

Pre-existing aliases for variables. Used to add transitive aliases.

class IsOp op => AliasedOp op where Source #

The class of operations that can produce aliasing and consumption information.

Methods

opAliases :: op -> [Names] Source #

consumedInOp :: op -> Names Source #

Instances

Instances details
AliasedOp () Source # 
Instance details

Defined in Futhark.IR.Prop.Aliases

Methods

opAliases :: () -> [Names] Source #

consumedInOp :: () -> Names Source #

AliasedOp SizeOp Source # 
Instance details

Defined in Futhark.IR.GPU.Op

(ASTRep rep, Aliased rep) => AliasedOp (SOAC rep) Source # 
Instance details

Defined in Futhark.IR.SOACS.SOAC

Methods

opAliases :: SOAC rep -> [Names] Source #

consumedInOp :: SOAC rep -> Names Source #

AliasedOp inner => AliasedOp (MemOp inner) Source # 
Instance details

Defined in Futhark.IR.Mem

Methods

opAliases :: MemOp inner -> [Names] Source #

consumedInOp :: MemOp inner -> Names Source #

(ASTRep rep, Aliased rep, ASTConstraints lvl) => AliasedOp (SegOp lvl rep) Source # 
Instance details

Defined in Futhark.IR.SegOp

Methods

opAliases :: SegOp lvl rep -> [Names] Source #

consumedInOp :: SegOp lvl rep -> Names Source #

(Aliased rep, AliasedOp op, ASTRep rep) => AliasedOp (MCOp rep op) Source # 
Instance details

Defined in Futhark.IR.MC.Op

Methods

opAliases :: MCOp rep op -> [Names] Source #

consumedInOp :: MCOp rep op -> Names Source #

(Aliased rep, AliasedOp op, ASTRep rep) => AliasedOp (HostOp rep op) Source # 
Instance details

Defined in Futhark.IR.GPU.Op

Methods

opAliases :: HostOp rep op -> [Names] Source #

consumedInOp :: HostOp rep op -> Names Source #

class AliasedOp (OpWithAliases op) => CanBeAliased op where Source #

The class of operations that can be given aliasing information. This is a somewhat subtle concept that is only used in the simplifier and when using "rep adapters".

Associated Types

type OpWithAliases op :: Type Source #

The op that results when we add aliases to this op.

Methods

removeOpAliases :: OpWithAliases op -> op Source #

Remove aliases from this op.

addOpAliases :: AliasTable -> op -> OpWithAliases op Source #

Add aliases to this op.

Instances

Instances details
CanBeAliased () Source # 
Instance details

Defined in Futhark.IR.Prop.Aliases

Associated Types

type OpWithAliases () Source #

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

Defined in Futhark.IR.SOACS.SOAC

Associated Types

type OpWithAliases (SOAC rep) Source #

CanBeAliased inner => CanBeAliased (MemOp inner) Source # 
Instance details

Defined in Futhark.IR.Mem

Associated Types

type OpWithAliases (MemOp inner) Source #

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

Defined in Futhark.IR.SegOp

Associated Types

type OpWithAliases (SegOp lvl rep) Source #

Methods

removeOpAliases :: OpWithAliases (SegOp lvl rep) -> SegOp lvl rep Source #

addOpAliases :: AliasTable -> SegOp lvl rep -> OpWithAliases (SegOp lvl rep) Source #

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

Defined in Futhark.IR.MC.Op

Associated Types

type OpWithAliases (MCOp rep op) Source #

Methods

removeOpAliases :: OpWithAliases (MCOp rep op) -> MCOp rep op Source #

addOpAliases :: AliasTable -> MCOp rep op -> OpWithAliases (MCOp rep op) Source #

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

Defined in Futhark.IR.GPU.Op

Associated Types

type OpWithAliases (HostOp rep op) Source #