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

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/06e36c63fce9aef5d3d8d9efeab14263333d48bf

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

commit 06e36c63fce9aef5d3d8d9efeab14263333d48bf
Author: Simon Peyton Jones <[email protected]>
Date:   Mon Dec 24 14:44:31 2012 +0000

    Make sum and product INLINABLE
    
    This was causing the bad behaviour in Trac #7507,
    because 'sum' wasn't getting specialised to Int64.
    
    It also deals with Trac #4321, which had the same cause.
    
    This has a big effect on some nofib programs too:
    
    
--------------------------------------------------------------------------------
            Program           Allocs   Runtime   Elapsed  TotalMem
    ------------------------------------------------------------------------
         bernouilli            -2.6%     -2.0%     -2.0%     +0.0%
               fft2           -23.8%      0.09      0.09    -16.7%
              fluid            -4.4%      0.01      0.01     +0.0%
             hidden            -3.2%     +2.1%     +1.8%     +0.0%
          integrate           -38.0%    -47.7%    -47.7%     -1.0%
               x2n1           -30.2%      0.01      0.01    -50.0%
    ------------------------------------------------------------------------
                Min           -38.0%    -47.7%    -47.7%    -50.0%
                Max            +0.4%    +11.2%    +11.8%     +6.9%
     Geometric Mean            -1.3%     +0.2%     +0.2%     -0.8%

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

 Data/List.hs |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/Data/List.hs b/Data/List.hs
index 9d09c0a..efd0fd1 100644
--- a/Data/List.hs
+++ b/Data/List.hs
@@ -1033,8 +1033,13 @@ foldl1' _ []             =  errorEmptyList "foldl1'"
 
 {-# SPECIALISE sum     :: [Int] -> Int #-}
 {-# SPECIALISE sum     :: [Integer] -> Integer #-}
+{-# INLINABLE sum #-}
 {-# SPECIALISE product :: [Int] -> Int #-}
 {-# SPECIALISE product :: [Integer] -> Integer #-}
+{-# INLINABLE product #-}
+-- We make 'sum' and 'product' inlinable so that we get specialisations
+-- at other types.  See, for example, Trac #7507.
+
 -- | The 'sum' function computes the sum of a finite list of numbers.
 sum                     :: (Num a) => [a] -> a
 -- | The 'product' function computes the product of a finite list of numbers.



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to