{-# 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 fromlore tolore.
(Allocable fromlore tolore,
 Allocator tolore (AllocM fromlore tolore)) =>
(Op fromlore -> AllocM fromlore tolore (Op tolore))
-> (Exp tolore -> AllocM fromlore tolore [ExpHint])
-> Pass fromlore tolore
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 :: * -> *) lore.
(Monad m, ASTLore lore) =>
Exp lore -> m [ExpHint]
defaultExpHints