{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}

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 = (Op Seq -> AllocM Seq SeqMem (Op SeqMem))
-> (Exp SeqMem -> AllocM Seq SeqMem [ExpHint]) -> Pass Seq SeqMem
forall fromrep torep inner.
Allocable fromrep torep inner =>
(Op fromrep -> AllocM fromrep torep (Op torep))
-> (Exp torep -> AllocM fromrep torep [ExpHint])
-> Pass fromrep torep
explicitAllocationsGeneric (MemOp () -> AllocM Seq SeqMem (MemOp ())
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MemOp () -> AllocM Seq SeqMem (MemOp ()))
-> (() -> MemOp ()) -> () -> AllocM Seq SeqMem (MemOp ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> MemOp ()
forall inner. inner -> MemOp inner
Inner) Exp SeqMem -> AllocM Seq SeqMem [ExpHint]
forall (m :: * -> *) rep.
(Monad m, ASTRep rep) =>
Exp rep -> m [ExpHint]
defaultExpHints