Safe Haskell | None |
---|
A Module
holds a C++ LLVM IR module. Module
s may be converted to or from strings or Haskell ASTs, or
added to an ExecutionEngine
and so JIT compiled to get function pointers.
- data Module
- withModuleFromAST :: Context -> Module -> (Module -> IO a) -> ErrorT String IO a
- moduleAST :: Module -> IO Module
- withModuleFromString :: Context -> String -> (Module -> IO a) -> ErrorT (Either String Diagnostic) IO a
- moduleString :: Module -> IO String
- moduleAssembly :: TargetMachine -> Module -> ErrorT String IO String
- moduleObject :: TargetMachine -> Module -> ErrorT String IO ByteString
- writeBitcodeToFile :: FilePath -> Module -> ErrorT String IO ()
- writeAssemblyToFile :: TargetMachine -> FilePath -> Module -> ErrorT String IO ()
- writeObjectToFile :: TargetMachine -> FilePath -> Module -> ErrorT String IO ()
- linkModules :: Bool -> Module -> Module -> ErrorT String IO ()
Documentation
withModuleFromString :: Context -> String -> (Module -> IO a) -> ErrorT (Either String Diagnostic) IO a
parse Module
from LLVM assembly
moduleString :: Module -> IO String
generate LLVM assembly from a Module
moduleAssembly :: TargetMachine -> Module -> ErrorT String IO String
produce target-specific assembly as a String
moduleObject :: TargetMachine -> Module -> ErrorT String IO ByteString
produce target-specific object code as a ByteString
writeAssemblyToFile :: TargetMachine -> FilePath -> Module -> ErrorT String IO ()
write target-specific assembly directly into a file
writeObjectToFile :: TargetMachine -> FilePath -> Module -> ErrorT String IO ()
write target-specific object code directly into a file
:: Bool | True to leave the right module unmodified, False to cannibalize it (for efficiency's sake). |
-> Module | The module into which to link |
-> Module | The module to link into the other (and cannibalize or not) |
-> ErrorT String IO () |
link LLVM modules - move or copy parts of a source module into a destination module. Note that this operation is not commutative - not only concretely (e.g. the destination module is modified, becoming the result) but abstractly (e.g. unused private globals in the source module do not appear in the result, but similar globals in the destination remain).