
#8766: length [Integer] is twice as slow but length [Int] is 10 times faster ------------------------------+-------------------------------------------- Reporter: George | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.1-rc1 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: Runtime performance bug Unknown/Multiple | Test Case: Difficulty: Unknown | Blocking: Blocked By: | Related Tickets: | ------------------------------+-------------------------------------------- Compared to 7.6.3 length in 7.8.1-rc1 has a performance regression: {{{ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.8.20140130 bash-3.2$ ghc -O2 LengthIntegerList.hs [1 of 1] Compiling Main ( LengthIntegerList.hs, LengthIntegerList.o ) Linking LengthIntegerList ... bash-3.2$ time ./LengthIntegerList 1073741824 real 0m45.344s user 0m44.230s sys 0m0.494s bash-3.2$ /usr/bin/ghc --version The Glorious Glasgow Haskell Compilation System, version 7.6.3 bash-3.2$ /usr/bin/ghc -O2 LengthIntegerList.hs [1 of 1] Compiling Main ( LengthIntegerList.hs, LengthIntegerList.o ) Linking LengthIntegerList ... bash-3.2$ time ./LengthIntegerList 1073741824 real 0m22.769s user 0m22.042s sys 0m0.385s bash-3.2$ cat LengthIntegerList.hs {-# OPTIONS_GHC -Wall #-} module Main where main :: IO() main = print $ length [1..(2^(30::Int)::Integer)] }}} thus length of [Integer] is twice as slow in rc1 but length of [Int] is 10 times faster: {{{ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.8.20140130 bash-3.2$ ghc -O2 LengthIntList.hs [1 of 1] Compiling Main ( LengthIntList.hs, LengthIntList.o ) Linking LengthIntList ... bash-3.2$ time ./LengthIntList 1073741824 real 0m0.723s user 0m0.693s sys 0m0.003s bash-3.2$ /usr/bin/ghc --version The Glorious Glasgow Haskell Compilation System, version 7.6.3 bash-3.2$ /usr/bin/ghc -O2 LengthIntList.hs [1 of 1] Compiling Main ( LengthIntList.hs, LengthIntList.o ) Linking LengthIntList ... bash-3.2$ time ./LengthIntList 1073741824 real 0m11.805s user 0m10.900s sys 0m0.351s bash-3.2$ cat LengthIntList.hs {-# OPTIONS_GHC -Wall #-} module Main where main :: IO() main = print $ length [1..(2^(30::Int)::Int)] }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8766 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler