futhark-0.21.8: 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 :: (ASTRep rep, CanBeAliased (Op rep), CSEInOp (OpWithAliases (Op rep))) => Bool -> Pass rep rep Source #

Perform CSE on every function in a program.

If the boolean argument is false, the pass will not perform CSE on expressions producing arrays. This should be disabled when the rep has memory information, since at that point arrays have identity beyond their value.

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

Perform CSE on a single function.

If the boolean argument is false, the pass will not perform CSE on expressions producing arrays. This should be disabled when the rep has memory information, since at that point arrays have identity beyond their value.

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

Perform CSE on some statements.

If the boolean argument is false, the pass will not perform CSE on expressions producing arrays. This should be disabled when the rep has memory information, since at that point arrays have identity beyond their value.

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 rep ()

(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))

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

Defined in Futhark.Optimise.CSE

Methods

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

(ASTRep rep, Aliased rep, CSEInOp (Op rep)) => CSEInOp (SegOp lvl rep) Source # 
Instance details

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: SegOp lvl rep -> CSEM rep0 (SegOp lvl rep)

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

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: MCOp rep op -> CSEM rep0 (MCOp rep op)

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

Defined in Futhark.Optimise.CSE

Methods

cseInOp :: HostOp rep op -> CSEM rep0 (HostOp rep op)