[commit: containers] master: Improve performance of size. (34bdac9)

Ian Lynagh igloo at earth.li
Thu Feb 23 01:14:07 CET 2012


Repository : ssh://darcs.haskell.org//srv/darcs/packages/containers

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/34bdac9107e1dcc720be62723faa1b570b4eae4e

>---------------------------------------------------------------

commit 34bdac9107e1dcc720be62723faa1b570b4eae4e
Author: Milan Straka <fox at ucw.cz>
Date:   Mon Nov 21 11:50:13 2011 +0100

    Improve performance of size.
    
    Inlining recursive bitcount leads to unnecessary heap allocation
    for every call to bitcount.
    
    When a bitcount just calls recursive function, heap allocation is
    avoided. (This is common issue of inlining recursive functions in GHC.)

>---------------------------------------------------------------

 Data/IntSet.hs |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Data/IntSet.hs b/Data/IntSet.hs
index 28f8a68..61b7e84 100644
--- a/Data/IntSet.hs
+++ b/Data/IntSet.hs
@@ -1318,8 +1318,9 @@ foldr'Bits prefix f z bm = let lb = lowestBitSet bm
     Derrick Lehmer and published in 1964 in a book edited by Beckenbach.)"
 ----------------------------------------------------------------------}
 bitcount :: Int -> Word -> Int
-bitcount a 0 = a
-bitcount a x = bitcount (a + 1) (x .&. (x-1))
+bitcount a x = go a x
+  where go a 0 = a
+        go a x = go (a + 1) (x .&. (x-1))
 {-# INLINE bitcount #-}
 
 





More information about the Cvs-libraries mailing list