helium-1.8: src/Helium/CodeGeneration/CoreToLvm.hs
{-| Module : CoreToLvm
License : GPL
Maintainer : helium@cs.uu.nl
Stability : experimental
Portability : portable
-}
module Helium.CodeGeneration.CoreToLvm ( coreToLvm ) where
import Lvm.Core.Expr (CoreModule)
import Lvm.Common.Id (newNameSupply)
import Lvm.Core.ToAsm (coreToAsm) -- enriched lambda expressions (Core) to Asm
import Lvm.Asm.ToLvm (asmToLvm) -- translate Asm to instructions
import Lvm.Asm.Inline (asmInline) -- optimize Asm (ie. inlining)
import Lvm.Write (lvmWriteFile)
coreToLvm :: [Char] -> CoreModule -> IO ()
coreToLvm source coremod = do
nameSupply <- newNameSupply
-- coreRemoveDead gebeurt al in Compile.hs
let asmmod = coreToAsm nameSupply coremod
asmopt = asmInline asmmod
lvmmod = asmToLvm asmopt
target = source ++ ".lvm"
-- putDoc (lvmPretty lvmmod)
lvmWriteFile target lvmmod