{-# LINE 1 "./Foreign/NVVM/Info.chs" #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
module Foreign.NVVM.Info (
nvvmVersion,
nvvmIRVersion,
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import Foreign.NVVM.Error
import Foreign.NVVM.Internal.C2HS
import Foreign.Marshal
import Foreign.C
import Foreign.Ptr
import Data.Version
import System.IO.Unsafe
{-# LINE 31 "./Foreign/NVVM/Info.chs" #-}
nvvmIRVersion :: (Version, Version)
nvvmIRVersion :: (Version, Version)
nvvmIRVersion = IO (Version, Version) -> (Version, Version)
forall a. IO a -> a
unsafePerformIO (IO (Version, Version) -> (Version, Version))
-> IO (Version, Version) -> (Version, Version)
forall a b. (a -> b) -> a -> b
$ do
(Status
status, Int
r1, Int
r2, Int
d1, Int
d2) <- IO (Status, Int, Int, Int, Int)
c_nvvmIRVersion
(Status, (Version, Version)) -> IO (Version, Version)
forall a. (Status, a) -> IO a
resultIfOk (Status
status, ([Int] -> Version
makeVersion [Int
r1,Int
r2], [Int] -> Version
makeVersion [Int
d1,Int
d2]))
c_nvvmIRVersion :: IO ((Status), (Int), (Int), (Int), (Int))
c_nvvmIRVersion :: IO (Status, Int, Int, Int, Int)
c_nvvmIRVersion =
(Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int))
-> (Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a1' ->
(Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int))
-> (Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a2' ->
(Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int))
-> (Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a3' ->
(Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int))
-> (Ptr CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a4' ->
Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO CInt
c_nvvmIRVersion'_ Ptr CInt
a1' Ptr CInt
a2' Ptr CInt
a3' Ptr CInt
a4' IO CInt
-> (CInt -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv Ptr CInt
a1'IO Int
-> (Int -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a1'' ->
Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv Ptr CInt
a2'IO Int
-> (Int -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a2'' ->
Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv Ptr CInt
a3'IO Int
-> (Int -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a3'' ->
Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv Ptr CInt
a4'IO Int
-> (Int -> IO (Status, Int, Int, Int, Int))
-> IO (Status, Int, Int, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a4'' ->
(Status, Int, Int, Int, Int) -> IO (Status, Int, Int, Int, Int)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res', Int
a1'', Int
a2'', Int
a3'', Int
a4'')
{-# LINE 58 "./Foreign/NVVM/Info.chs" #-}
nvvmVersion :: Version
nvvmVersion :: Version
nvvmVersion = IO Version -> Version
forall a. IO a -> a
unsafePerformIO (IO Version -> Version) -> IO Version -> Version
forall a b. (a -> b) -> a -> b
$ do
(Status
status, Int
v1, Int
v2) <- IO (Status, Int, Int)
c_nvvmVersion
(Status, Version) -> IO Version
forall a. (Status, a) -> IO a
resultIfOk (Status
status, [Int] -> Version
makeVersion [Int
v1,Int
v2])
c_nvvmVersion :: IO ((Status), (Int), (Int))
c_nvvmVersion :: IO (Status, Int, Int)
c_nvvmVersion =
(Ptr CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int))
-> (Ptr CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a1' ->
(Ptr CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int))
-> (Ptr CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a2' ->
Ptr CInt -> Ptr CInt -> IO CInt
c_nvvmVersion'_ Ptr CInt
a1' Ptr CInt
a2' IO CInt -> (CInt -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv Ptr CInt
a1'IO Int -> (Int -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a1'' ->
Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv Ptr CInt
a2'IO Int -> (Int -> IO (Status, Int, Int)) -> IO (Status, Int, Int)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a2'' ->
(Status, Int, Int) -> IO (Status, Int, Int)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res', Int
a1'', Int
a2'')
{-# LINE 76 "./Foreign/NVVM/Info.chs" #-}
foreign import ccall unsafe "Foreign/NVVM/Info.chs.h nvvmIRVersion"
c_nvvmIRVersion'_ :: ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))
foreign import ccall unsafe "Foreign/NVVM/Info.chs.h nvvmVersion"
c_nvvmVersion'_ :: ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))