summaryrefslogtreecommitdiff
path: root/compiler/main/CodeOutput.lhs
diff options
context:
space:
mode:
authorPeter Wortmann <scpmw@leeds.ac.uk>2013-06-26 15:45:16 +0100
committerDavid Terei <davidterei@gmail.com>2013-06-27 13:39:11 -0700
commita948fe838bc79363d7565033d6ee42bf24d52fdc (patch)
tree22660c80d3c6d3b8438641d62ec1c996bda2780f /compiler/main/CodeOutput.lhs
parentfa6cbdfb6e5d572dc74622d1c12e259c208321ab (diff)
downloadhaskell-a948fe838bc79363d7565033d6ee42bf24d52fdc.tar.gz
Major Llvm refactoring
This combined patch reworks the LLVM backend in a number of ways: 1. Most prominently, we introduce a LlvmM monad carrying the contents of the old LlvmEnv around. This patch completely removes LlvmEnv and refactors towards standard library monad combinators wherever possible. 2. Support for streaming - we can now generate chunks of Llvm for Cmm as it comes in. This might improve our speed. 3. To allow streaming, we need a more flexible way to handle forward references. The solution (getGlobalPtr) unifies LlvmCodeGen.Data and getHsFunc as well. 4. Skip alloca-allocation for registers that are actually never written. LLVM will automatically eliminate these, but output is smaller and friendlier to human eyes this way. 5. We use LlvmM to collect references for llvm.used. This allows places other than cmmProcLlvmGens to generate entries.
Diffstat (limited to 'compiler/main/CodeOutput.lhs')
-rw-r--r--compiler/main/CodeOutput.lhs6
1 files changed, 1 insertions, 5 deletions
diff --git a/compiler/main/CodeOutput.lhs b/compiler/main/CodeOutput.lhs
index f94030306d..b8b187241b 100644
--- a/compiler/main/CodeOutput.lhs
+++ b/compiler/main/CodeOutput.lhs
@@ -168,13 +168,9 @@ outputLlvm :: DynFlags -> FilePath -> Stream IO RawCmmGroup () -> IO ()
outputLlvm dflags filenm cmm_stream
= do ncg_uniqs <- mkSplitUniqSupply 'n'
- -- ToDo: make the LLVM backend consume the C-- incrementally,
- -- by pushing the cmm_stream inside (c.f. nativeCodeGen)
- rawcmms <- Stream.collect cmm_stream
-
{-# SCC "llvm_output" #-} doOutput filenm $
\f -> {-# SCC "llvm_CodeGen" #-}
- llvmCodeGen dflags f ncg_uniqs rawcmms
+ llvmCodeGen dflags f ncg_uniqs cmm_stream
\end{code}