
#10788: performance regression involving minimum (and maybe Vector) -------------------------------------+------------------------------------- Reporter: rwbarton | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by nomeata): In 7.8, both `minimum` and `sum` were non-fusing left-folds. In 7.10, `sum`, via `foldl`, is fusing, so this is the 5× improvement you observe. `minimum` is not easily foldable: It is a `foldl1`, which treats the first `(:)` different from the rest, and it is not clear how to fix that. So performance difference between `minimum` and `sum` in 7.10 can be explained. What needs to be investigated is why 7.10 degraded by 50% over 7.8. I do not expect Call Arity/foldl fusion to play a role here, but I might be wrong. BTW: One could reasonably expect the compiler to transform `minimum (x:xs)` into `foldl' min x xs`, which could then maybe fuse, but that does not seem to be the case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10788#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler