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

Futhark.Optimise.CSE

Description

This module implements common-subexpression elimination. This module does not actually remove the duplicate, but only replaces one with a diference to the other. E.g:

  let a = x + y
  let b = x + y

becomes:

  let a = x + y
  let b = a

After which copy propagation in the simplifier will actually remove the definition of b.

Our CSE is still rather stupid. No normalisation is performed, so the expressions x+y and y+x will be considered distinct. Furthermore, no expression with its own binding will be considered equal to any other, since the variable names will be distinct. This affects SOACs in particular.

Synopsis

Documentation

performCSE :: (Attributes lore, CanBeAliased (Op lore), CSEInOp (OpWithAliases (Op lore))) => Bool -> Pass lore lore Source #

Perform CSE on every function in a program.

performCSEOnFunDef :: (Attributes lore, CanBeAliased (Op lore), CSEInOp (OpWithAliases (Op lore))) => Bool -> FunDef lore -> FunDef lore Source #

Perform CSE on a single function.

performCSEOnStms :: (Attributes lore, CanBeAliased (Op lore), CSEInOp (OpWithAliases (Op lore))) => Bool -> Stms lore -> Stms lore Source #

Perform CSE on some statements.

class CSEInOp op Source #

The operations that permit CSE.

Minimal complete definition

cseInOp

Instances

Instances details
CSEInOp () Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: () -> CSEM lore ()

(Attributes lore, CanBeAliased (Op lore), CSEInOp (OpWithAliases (Op lore))) => CSEInOp (SOAC (Aliases lore)) Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: SOAC (Aliases lore) -> CSEM lore0 (SOAC (Aliases lore))

CSEInOp op => CSEInOp (MemOp op) Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: MemOp op -> CSEM lore (MemOp op)

(Attributes lore, Aliased lore, CSEInOp (Op lore)) => CSEInOp (SegOp lvl lore) Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: SegOp lvl lore -> CSEM lore0 (SegOp lvl lore)

(Attributes lore, Aliased lore, CSEInOp (Op lore), CSEInOp op) => CSEInOp (HostOp lore op) Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: HostOp lore op -> CSEM lore0 (HostOp lore op)