module Futhark.Transform.CopyPropagate
( copyPropagateInProg,
copyPropagateInStms,
copyPropagateInFun,
)
where
import Futhark.Analysis.SymbolTable qualified as ST
import Futhark.IR
import Futhark.MonadFreshNames
import Futhark.Optimise.Simplify
import Futhark.Optimise.Simplify.Rep (Wise)
import Futhark.Pass
copyPropagateInProg ::
SimplifiableRep rep =>
SimpleOps rep ->
Prog rep ->
PassM (Prog rep)
copyPropagateInProg :: forall {k} (rep :: k).
SimplifiableRep rep =>
SimpleOps rep -> Prog rep -> PassM (Prog rep)
copyPropagateInProg SimpleOps rep
simpl = forall {k} (rep :: k).
SimplifiableRep rep =>
SimpleOps rep
-> RuleBook (Wise rep)
-> HoistBlockers rep
-> Prog rep
-> PassM (Prog rep)
simplifyProg SimpleOps rep
simpl forall a. Monoid a => a
mempty forall {k} (rep :: k). HoistBlockers rep
neverHoist
copyPropagateInStms ::
(MonadFreshNames m, SimplifiableRep rep) =>
SimpleOps rep ->
Scope rep ->
Stms rep ->
m (Stms rep)
copyPropagateInStms :: forall {k} (m :: * -> *) (rep :: k).
(MonadFreshNames m, SimplifiableRep rep) =>
SimpleOps rep -> Scope rep -> Stms rep -> m (Stms rep)
copyPropagateInStms SimpleOps rep
simpl = forall {k} (m :: * -> *) (rep :: k).
(MonadFreshNames m, SimplifiableRep rep) =>
SimpleOps rep
-> RuleBook (Wise rep)
-> HoistBlockers rep
-> Scope rep
-> Stms rep
-> m (Stms rep)
simplifyStms SimpleOps rep
simpl forall a. Monoid a => a
mempty forall {k} (rep :: k). HoistBlockers rep
neverHoist
copyPropagateInFun ::
(MonadFreshNames m, SimplifiableRep rep) =>
SimpleOps rep ->
ST.SymbolTable (Wise rep) ->
FunDef rep ->
m (FunDef rep)
copyPropagateInFun :: forall {k} (m :: * -> *) (rep :: k).
(MonadFreshNames m, SimplifiableRep rep) =>
SimpleOps rep
-> SymbolTable (Wise rep) -> FunDef rep -> m (FunDef rep)
copyPropagateInFun SimpleOps rep
simpl = forall {k} (m :: * -> *) (rep :: k).
(MonadFreshNames m, SimplifiableRep rep) =>
SimpleOps rep
-> RuleBook (Wise rep)
-> HoistBlockers rep
-> SymbolTable (Wise rep)
-> FunDef rep
-> m (FunDef rep)
simplifyFun SimpleOps rep
simpl forall a. Monoid a => a
mempty forall {k} (rep :: k). HoistBlockers rep
neverHoist