[commit: ghc] master: Speed improvement to LLVM Mangler for large sections. (2f8ef8f)
David Terei
davidterei at gmail.com
Sat Jun 25 20:36:17 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/2f8ef8f701954dc5f145dbabe11f80ba2bed45db
>---------------------------------------------------------------
commit 2f8ef8f701954dc5f145dbabe11f80ba2bed45db
Author: David Terei <davidterei at gmail.com>
Date: Sat Jun 25 11:33:14 2011 -0700
Speed improvement to LLVM Mangler for large sections.
Patch by Peter Wortmann!
>---------------------------------------------------------------
compiler/llvmGen/LlvmMangler.hs | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/compiler/llvmGen/LlvmMangler.hs b/compiler/llvmGen/LlvmMangler.hs
index 591ef81..4f61a93 100644
--- a/compiler/llvmGen/LlvmMangler.hs
+++ b/compiler/llvmGen/LlvmMangler.hs
@@ -71,7 +71,7 @@ llvmFixupAsm f1 f2 = do
-}
fixTables :: Handle -> Handle -> I.IntMap B.ByteString -> IO ()
fixTables r w m = do
- f <- getFun r B.empty
+ f <- getFun r
if B.null f
then return ()
else let fun = fixupStack f B.empty
@@ -92,13 +92,14 @@ fixTables r w m = do
in mapM_ (B.hPut w) bs >> fixTables r w m'
-- | Read in the next function/data defenition
-getFun :: Handle -> B.ByteString -> IO B.ByteString
-getFun r f = do
- l <- (try (B.hGetLine r))::IO (Either IOError B.ByteString)
- case l of
- Right l' | B.null l' -> return f
- | otherwise -> getFun r (f `B.append` newLine `B.append` l')
- Left _ -> return B.empty
+getFun :: Handle -> IO B.ByteString
+getFun r = go [] >>= return . B.intercalate newLine
+ where go ls = do
+ l <- (try (B.hGetLine r))::IO (Either IOError B.ByteString)
+ case l of
+ Right l' | B.null l' -> (return B.empty : reverse ls)
+ | otherwise -> go (l':ls)
+ Left _ -> return []
{-|
Mac OS X requires that the stack be 16 byte aligned when making a function
More information about the Cvs-ghc
mailing list