[GHC] #11383: CAFs lose sharing due to implicit call stacks
GHC
ghc-devs at haskell.org
Fri Jan 8 15:03:41 UTC 2016
#11383: CAFs lose sharing due to implicit call stacks
-------------------------------------+-------------------------------------
Reporter: simonmar | Owner: gridaphobe
Type: bug | Status: new
Priority: normal | Milestone: 8.0.1
Component: Compiler | Version: 8.0.1-rc1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
The implicit call stack machinery adds a constraint to CAFs, which loses
sharing in some cases. The regression is fixed by -O (actually `-ffull-
laziness`), but it is surprising nonetheless, and might cause problems for
people using GHCi or other places where -O is turned off.
For example:
{{{
{-# LANGUAGE NoMonomorphismRestriction #-}
module Main where
import System.Environment
fib :: Integer -> Integer
fib n = if n < 2 then 1 else fib (n-1) + fib (n-2)
x = if fib 3 > 20 then error "x" else fib 30
main = do
[n] <- getArgs
case n of
"a" -> print (x + x)
"b" -> print x
}}}
Try it as follows (requires 8.0+):
{{{
$ ghc imp.hs -fforce-recomp -O -fno-full-laziness
$ ./imp a +RTS -t
2692538
<<ghc: 430859568 bytes, 822 GCs, 36580/44384 avg/max bytes residency (2
samples), 1M in use, 0.000 INIT (0.000 elapsed), 0.156 MUT (0.203
elapsed), 0.018 GC (0.009 elapsed) :ghc>>
$ ./imp b +RTS -t
1346269
<<ghc: 215456192 bytes, 411 GCs, 36580/44384 avg/max bytes residency (2
samples), 1M in use, 0.000 INIT (0.000 elapsed), 0.073 MUT (0.119
elapsed), 0.008 GC (0.004 elapsed) :ghc>>
}}}
With GHC 7.10 and earlier both commands perform the same.
Note that this only uses `error`, and doesn't require `ImplicitParams`.
It does require `NoMonomorphismRestriction`, however.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11383>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list