
#11701: ghc generates significant slower code -------------------------------------+------------------------------------- Reporter: HuStmpHrrr | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Keywords: efficiency | Operating System: Linux Architecture: x86_64 | Type of failure: Runtime (amd64) | performance bug Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- I've already started a discussion here in SO: http://stackoverflow.com/questions/35941674/latest-ghc-generates-slower- code So again, I realized that the latest version of ghc produces significantly slower code than older version. my default ghc is the latest version as of now: {{{ $ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.10.3 }}} I have also two other old versions installed in my local machine. test code as following {{{#!hs import Data.Word import Data.List import System.Environment collatzNext :: Word32 -> Word32 collatzNext a = (if even a then a else 3*a+1) `div` 2 -- new code collatzLen :: Word32 -> Int collatzLen a0 = lenIterWhile collatzNext (/= 1) a0 lenIterWhile :: (a -> a) -> (a -> Bool) -> a -> Int lenIterWhile next notDone start = len start 0 where len n m = if notDone n then len (next n) (m+1) else m -- End of new code main = do [a0] <- getArgs let max_a0 = (read a0)::Word32 print $ maximum $ map (\a0 -> (collatzLen a0, a0)) [1..max_a0] }}} following are the three runs in my machine: {{{ $ ~/Tools/ghc-7.6.1/bin/ghc -O2 Test.hs [1 of 1] Compiling Main ( Test.hs, Test.o ) Linking Test ... $ time ./Test 1000000 (329,837799) real 0m1.901s user 0m1.896s sys 0m0.000s $ ~/Tools/ghc/bin/ghc -O2 Test.hs [1 of 1] Compiling Main ( Test.hs, Test.o ) Linking Test ... $ time ./Test 1000000 (329,837799) real 0m10.562s user 0m10.528s sys 0m0.036s $ ~/Tools/ghc-7.4.2/bin/ghc -O2 Test.hs [1 of 1] Compiling Main ( Test.hs, Test.o ) Linking Test ... $ time ./Test 1000000 (329,837799) real 0m1.879s user 0m1.876s sys 0m0.000s }}} Obviously we can tell latest version of ghc produces worse code than the older two versions. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11701 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler