{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} module Futhark.CodeGen.ImpGen.Kernels.SegMap ( compileSegMap ) where import Control.Monad.Except import Prelude hiding (quot, rem) import Futhark.Representation.ExplicitMemory import Futhark.CodeGen.ImpGen.Kernels.Base -- | Compile 'SegMap' instance to host-level code with calls to -- various kernels. compileSegMap :: Pattern ExplicitMemory -> KernelSpace -> KernelBody InKernel -> CallKernelGen () compileSegMap pat space kbody = do (constants, init_constants) <- kernelInitialisation space sKernel constants "segmap" $ do init_constants compileKernelStms constants (kernelBodyStms kbody) $ zipWithM_ (compileKernelResult constants) (patternElements pat) $ kernelBodyResult kbody