llvm-tf-3.0.2: example/CallConv.hs
module Main (main) where
import LLVM.Core
import LLVM.FFI.Core (CallingConvention(GHC))
import Data.Word (Word32)
-- Our module will have these two functions.
data Mod = Mod {
m1 :: Function (Word32 -> IO Word32),
m2 :: Function (Word32 -> Word32 -> IO Word32)
}
main :: IO ()
main = do
m <- newModule
_fns <- defineModule m buildMod
--_ <- optimizeModule 3 m
writeBitcodeToFile "CallConv.bc" m
return ()
buildMod :: CodeGenModule Mod
buildMod = do
mod2 <- createNamedFunction InternalLinkage "plus" $ \ x y -> do
r <- add x y
ret r
setFuncCallConv mod2 GHC
mod1 <- newNamedFunction ExternalLinkage "test"
defineFunction mod1 $ \ arg -> do
r <- callWithConv GHC mod2 arg (valueOf 1)
ret r
return $ Mod {m1 = mod1, m2 = mod2}