#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 rwbarton): It looks like more inlining happened in 7.10.1 at the definition site of `strictMinimum`, and the result was that the unfolding became too large for GHC to want to inline it at use sites. 7.8.4: {{{ Considering inlining: Data.List.strictMinimum arg infos [ValueArg, NonTrivArg] uf arity 2 interesting continuation CaseCtxt some_benefit True is exp: True is work-free: True guidance IF_ARGS [30 30] 80 0 discounted size = -10 ANSWER = YES strictMinimum :: GHC.Classes.Ord a -> [a] -> a {- Arity: 2, Strictness: <L,1*U(A,A,A,A,A,A,A,1*C(C1(U)))><S,1*U>, Unfolding: (\ @ a $dOrd :: GHC.Classes.Ord a ds :: [a] -> case ds of wild { [] -> Data.List.minimum1 @ a : ipv ipv1 -> Data.List.foldl' @ a @ a (GHC.Classes.min @ a $dOrd) ipv ipv1 }) -} }}} 7.10.1: {{{ Considering inlining: strictMinimum arg infos [ValueArg, NonTrivArg] interesting continuation CaseCtxt some_benefit True is exp: True is work-free: True guidance IF_ARGS [30 30] 200 0 discounted size = 110 ANSWER = NO strictMinimum :: Ord a => [a] -> a {- Arity: 2, Strictness: <L,1*U(A,A,A,A,A,A,A,1*U)><S,1*U>, Unfolding: (\ @ a $dOrd :: Ord a ds :: [a] -> case ds of wild { [] -> minimum1 @ a : ipv ipv1 -> let { k :: a -> a -> a = min @ a $dOrd } in letrec { go :: [a] -> a -> a {- Arity: 2, Strictness: <S,1*U><S,1*U> -} = \ ds1 :: [a] eta :: a -> case ds1 of wild1 { [] -> eta : y ys -> case eta of z { DEFAULT -> go ys (k z y) } } } in go ipv1 ipv }) -} }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10788#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler