{-# LANGUAGE TypeFamilies #-} module Data.Array.Knead.Code where import qualified Data.Array.Knead.Shape as Shape import qualified LLVM.Extra.Multi.Value as MultiValue import qualified LLVM.Extra.Storable as Storable import qualified LLVM.Core as LLVM import Foreign.Ptr (Ptr) import Prelude2010 import Prelude () getElementPtr :: (Shape.C sh, Shape.Index sh ~ ix, Storable.C a) => MultiValue.T sh -> LLVM.Value (Ptr a) -> MultiValue.T ix -> LLVM.CodeGenFunction r (LLVM.Value (Ptr a)) getElementPtr sh ptr ix = flip Storable.advancePtr ptr =<< LLVM.bitcast =<< Shape.offset sh ix