    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