module Futhark.Pass.ExplicitAllocations.Seq
  ( explicitAllocations,
    simplifiable,
  )
where

import Futhark.IR.Seq
import Futhark.IR.SeqMem
import Futhark.Pass
import Futhark.Pass.ExplicitAllocations

explicitAllocations :: Pass Seq SeqMem
explicitAllocations :: Pass Seq SeqMem
explicitAllocations =
  Space
-> (Op Seq -> AllocM Seq SeqMem (Op SeqMem))
-> (Exp SeqMem -> AllocM Seq SeqMem [ExpHint])
-> Pass Seq SeqMem
forall fromrep torep (inner :: * -> *).
Allocable fromrep torep inner =>
Space
-> (Op fromrep -> AllocM fromrep torep (Op torep))
-> (Exp torep -> AllocM fromrep torep [ExpHint])
-> Pass fromrep torep
explicitAllocationsGeneric
    Space
DefaultSpace
    (AllocM Seq SeqMem (Op SeqMem)
-> Op Seq -> AllocM Seq SeqMem (Op SeqMem)
forall a b. a -> b -> a
const (AllocM Seq SeqMem (Op SeqMem)
 -> Op Seq -> AllocM Seq SeqMem (Op SeqMem))
-> AllocM Seq SeqMem (Op SeqMem)
-> Op Seq
-> AllocM Seq SeqMem (Op SeqMem)
forall a b. (a -> b) -> a -> b
$ Op SeqMem -> AllocM Seq SeqMem (Op SeqMem)
forall a. a -> AllocM Seq SeqMem a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Op SeqMem -> AllocM Seq SeqMem (Op SeqMem))
-> Op SeqMem -> AllocM Seq SeqMem (Op SeqMem)
forall a b. (a -> b) -> a -> b
$ NoOp SeqMem -> MemOp NoOp SeqMem
forall (inner :: * -> *) rep. inner rep -> MemOp inner rep
Inner NoOp SeqMem
forall {k} (rep :: k). NoOp rep
NoOp)
    Exp SeqMem -> AllocM Seq SeqMem [ExpHint]
forall rep (m :: * -> *).
(ASTRep rep, HasScope rep m) =>
Exp rep -> m [ExpHint]
defaultExpHints