{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} module Futhark.CodeGen.ImpGen.Sequential ( compileProg ) where import qualified Futhark.CodeGen.ImpCode.Sequential as Imp import qualified Futhark.CodeGen.ImpGen as ImpGen import Futhark.Representation.SeqMem import Futhark.MonadFreshNames compileProg :: MonadFreshNames m => Prog SeqMem -> m Imp.Program compileProg :: Prog SeqMem -> m Program compileProg = () -> Operations SeqMem () Sequential -> Space -> Prog SeqMem -> m Program forall lore op (m :: * -> *) r. (Mem lore, FreeIn op, MonadFreshNames m) => r -> Operations lore r op -> Space -> Prog lore -> m (Definitions op) ImpGen.compileProg () Operations SeqMem () Sequential forall r. Operations SeqMem r Sequential ops Space Imp.DefaultSpace where ops :: Operations SeqMem r Sequential ops = OpCompiler SeqMem r Sequential -> Operations SeqMem r Sequential forall lore op r. (Mem lore, FreeIn op) => OpCompiler lore r op -> Operations lore r op ImpGen.defaultOperations OpCompiler SeqMem r Sequential forall lore r op. (AllocOp (Op lore), Checkable lore, OpReturns lore, FParamAttr lore ~ FParamMem, LParamAttr lore ~ LParamMem, LetAttr lore ~ LParamMem, RetType lore ~ RetTypeMem, BranchType lore ~ BranchTypeMem) => PatternT (LetAttr lore) -> MemOp () -> ImpM lore r op () opCompiler opCompiler :: PatternT (LetAttr lore) -> MemOp () -> ImpM lore r op () opCompiler PatternT (LetAttr lore) dest (Alloc SubExp e Space space) = PatternT (LetAttr lore) -> SubExp -> Space -> ImpM lore r op () forall lore r op. Mem lore => Pattern lore -> SubExp -> Space -> ImpM lore r op () ImpGen.compileAlloc PatternT (LetAttr lore) dest SubExp e Space space opCompiler PatternT (LetAttr lore) _ (Inner ()) = () -> ImpM lore r op () forall (f :: * -> *) a. Applicative f => a -> f a pure ()