
On 03/02/2010 17:59, Serge D. Mechveliani wrote:
To my
Dear GHC team,
It looks like ghc-6.12.1 reports erroneous time profiling -- when the Main module of the project is made under -O. [..] This is for ghc-6.12.1 made from source for Debian Linux and i386-like.
Main.main calls for Complete.complete, `complete' calls for eLoop inside its source. eLoop must take almost all the time. My whole user library is made under -O -prof, and --enable-library-profiling. Main is compiled by ghc $dmCpOpt -prof --make Main and run by ./Main +RTS -M400m -pT -RTS For this key, the profiling report Main.prof looks natural and shows eLoop -- 97%.
But for ghc $dmCpOpt -O -prof --make Make,
it shows a different thing: zero for eLoop and 99% for `main'.
On Wed, Feb 03, 2010 at 05:38:36PM +0100, Daniel Fischer wrote:
Could be that eLoop is inlined with -O.
Thank you. I also thought about this. But the question still looks difficult.
Try
ghc $dmCpOpt -O -prof -auto-all --make
That should show eLoop (if that's a top-level declaration, otherwise you'd have to insert a pragma {-# SCC "eLoop" #-} manually).
eLoop is not a top-level declaration, and I do set {-# SCC "eLoop" #-}. The key combination ghc $dmCpOpt -prof --make Main shows 95% for eLoop, and adding -O to this line shows 0% for eLoop, independently on presence of -auto-all in this line (the whole library is made under -O -prof).
There are known bugs in this area, see e.g. http://hackage.haskell.org/trac/ghc/ticket/2552
Yes, I recall that the effect may be of inlining.
Inlining should not in general affect the shape of the profile. I can't say much else here without seeing the specific code. Cheers, Simon