{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_HADDOCK hide #-}
module Data.Array.Accelerate.LLVM.AST (
PreOpenAccCommand(..),
PreOpenAccSkeleton(..),
PreAfun, PreOpenAfun(..),
PreFun, PreOpenFun(..),
PreExp, PreOpenExp(..),
Idx(..), Val(..), prj,
) where
import Data.Array.Accelerate.LLVM.State
import Data.Array.Accelerate.LLVM.Execute.Async
import Data.Array.Accelerate.Array.Sugar
import Data.Array.Accelerate.Product
import Data.Array.Accelerate.AST
( PreOpenAfun(..), PreOpenExp(..), PreOpenFun(..), Idx(..), Val(..), PreAfun, PreFun, PreExp, prj )
data PreOpenAccCommand acc arch aenv a where
Avar :: Arrays arrs
=> Idx aenv arrs
-> PreOpenAccCommand acc arch aenv arrs
Alet :: (Arrays bnd, Arrays body)
=> acc arch aenv bnd
-> acc arch (aenv, bnd) body
-> PreOpenAccCommand acc arch aenv body
Alloc :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreOpenAccCommand acc arch aenv (Array sh e)
Use :: Arrays arrs
=> ArrRepr arrs
-> PreOpenAccCommand acc arch aenv arrs
Unit :: Elt e
=> PreExp (acc arch) aenv e
-> PreOpenAccCommand acc arch aenv (Scalar e)
Atuple :: (Arrays arrs, IsAtuple arrs)
=> Atuple (acc arch aenv) (TupleRepr arrs)
-> PreOpenAccCommand acc arch aenv arrs
Aprj :: (Arrays arrs, IsAtuple arrs, Arrays a)
=> TupleIdx (TupleRepr arrs) a
-> acc arch aenv arrs
-> PreOpenAccCommand acc arch aenv a
Apply :: (Arrays as, Arrays bs)
=> PreOpenAfun (acc arch) aenv (as -> bs)
-> acc arch aenv as
-> PreOpenAccCommand acc arch aenv bs
Aforeign :: (Arrays as, Arrays bs)
=> String
-> (StreamR arch -> as -> LLVM arch bs)
-> acc arch aenv as
-> PreOpenAccCommand acc arch aenv bs
Acond :: Arrays arrs
=> PreExp (acc arch) aenv Bool
-> acc arch aenv arrs
-> acc arch aenv arrs
-> PreOpenAccCommand acc arch aenv arrs
Awhile :: Arrays arrs
=> PreOpenAfun (acc arch) aenv (arrs -> Scalar Bool)
-> PreOpenAfun (acc arch) aenv (arrs -> arrs)
-> acc arch aenv arrs
-> PreOpenAccCommand acc arch aenv arrs
Reshape :: (Shape sh, Shape sh', Elt e)
=> PreExp (acc arch) aenv sh
-> Idx aenv (Array sh' e)
-> PreOpenAccCommand acc arch aenv (Array sh e)
Unzip :: (Elt tup, Elt e)
=> TupleIdx (TupleRepr tup) e
-> Idx aenv (Array sh tup)
-> PreOpenAccCommand acc arch aenv (Array sh e)
data PreOpenAccSkeleton acc arch aenv a where
Map :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
Generate :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
Transform :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
Backpermute :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
Fold :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
Fold1 :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
FoldSeg :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreExp (acc arch) aenv (Z :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e)
Fold1Seg :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreExp (acc arch) aenv (Z :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e)
Scanl :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e)
Scanl1 :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e)
Scanl' :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e, Array sh e)
Scanr :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e)
Scanr1 :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e)
Scanr' :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv (sh :. Int)
-> PreOpenAccSkeleton acc arch aenv (Array (sh:.Int) e, Array sh e)
Permute :: (Shape sh, Shape sh', Elt e)
=> PreExp (acc arch) aenv sh
-> acc arch aenv (Array sh' e)
-> PreOpenAccSkeleton acc arch aenv (Array sh' e)
Stencil :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreOpenAccSkeleton acc arch aenv (Array sh e)
Stencil2 :: (Shape sh, Elt e)
=> PreExp (acc arch) aenv sh
-> PreExp (acc arch) aenv sh
-> PreOpenAccSkeleton acc arch aenv (Array sh e)