This program runs significantly slower with optimization than without.
I need two modules to manifest this bug.
Is this a duplicate of 917/1945? Using -fno-full-laziness does not mitigate the problem.
This seems to be the opposite of 1945. Without optimizations, there is a long delay and then all 10 results print at once. With optimizations, there is a shorter delay between each print statement.
module Main
(main)
where
import NaiveFib?
import Control.Monad
main :: IO ()
main = replicateM_ 10 (printFib 37)
module NaiveFib?
(printFib,naiveFib)
where
printFib :: Integer -> IO ()
printFib = print . naiveFib
naiveFib :: Integer -> Integer
naiveFib 0 = 0
naiveFib 1 = 1
naiveFib n = naiveFib (n-1) + naiveFib (n-2)
lane@wired:~/test/optimizer-bug$ make main-O0
ghc-6.8.1 -O0 --make Main.hs -o main-O0
[1 of 2] Compiling NaiveFib? ( NaiveFib?.hs, NaiveFib?.o )
[2 of 2] Compiling Main ( Main.hs, Main.o )
Linking main-O0 ...
lane@wired:~/test/optimizer-bug$ time ./main-O0
24157817
24157817
24157817
24157817
24157817
24157817
24157817
24157817
24157817
24157817
real 0m34.491s
user 0m25.982s
sys 0m0.564s
lane@wired:~/test/optimizer-bug$ make main-O2
ghc-6.8.1 -O2 --make Main.hs -o main-O2
[1 of 2] Compiling NaiveFib? ( NaiveFib?.hs, NaiveFib?.o )
[2 of 2] Compiling Main ( Main.hs, Main.o )
Linking main-O2 ...
lane@wired:~/test/optimizer-bug$ time ./main-O2
24157817
24157817
24157817
24157817
24157817
24157817
24157817
24157817
24157817
24157817
real 1m50.331s
user 1m23.641s
sys 0m1.008s