{- |
Module : Backend
Description : Converts the internal LLVM representation into textual LLVM IR.
Maintainer : See the AUTHORS file in the root directory of this project for a list
of contributors.
License : MIT
Uses the LLVM bindings for Haskell to convert the internal LLVM representation
(provided by the bindings themselves) into the final, textual LLVM IR.
Does not do any linking.
-}
module Backend (
process -- main function of the module "Backend"
)
where
-- imports --
import InterfaceDT as IDT
import ErrorHandling as EH
import LLVM.General.AST
import qualified LLVM.General.AST as AST
import LLVM.General.Context
import LLVM.General.Module
import Control.Monad.Error
import LLVM.General.AST.Global
-- functions --
-- |Converts the internal LLVM representation into textual LLVM IR.
process :: IDT.CodeOpt2Backend -> IDT.Backend2Output
process input = output
where
output = IDT.IBO $ generateOutput input
-- |Uses the Haskell LLVM bindings to convert the internal LLVM
-- representation into textual LLVM IR.
generateOutput :: IDT.CodeOpt2Backend -> IO String
generateOutput (IDT.ICB mod) = do
s <- withContext $ \context ->
runErrorT $ withModuleFromAST context mod $ \m -> moduleLLVMAssembly m
case s of
Left err -> return err
Right ll -> return ll