
#12150: Compile time performance degradation on code that uses undefined/error with CallStacks -------------------------------------+------------------------------------- Reporter: thomie | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by gridaphobe): Sorry to be so slow! I've finally had a chance to look at this.. First of all, I can't reproduce the actual slowdown on my laptop {{{
python test.py tempfile = /var/folders/d0/j2pt98tx3pvcpdjghyx38c9c0000gn/T/tmpvwxkz4.hs N clauses : time (s) 10 : 0.27 20 : 0.31 40 : 0.13 80 : 0.13 160 : 0.12 320 : 0.12 640 : 0.12 1280 : 0.13 }}}
though the shrinking numbers makes me concerned that there may be some strange caching going on.. Ah, indeed, if I add `-fforce-recomp` I get something closer to your result {{{
python test.py tempfile = /var/folders/d0/j2pt98tx3pvcpdjghyx38c9c0000gn/T/tmpXChceI.hs N clauses : time (s) 10 : 0.27 20 : 0.31 40 : 0.37 80 : 0.55 160 : 0.88 320 : 1.55 640 : 3.06 1280 : 6.10 }}}
Second, I took a look at the generated Core, and while the '''desugared''' Core looks correct to me, the '''simplified''' Core has had the CallStacks inlined at each callsite, which is utterly pointless. In an earlier ticket (#10844) I investigated preventing CallStacks (and string literals) from being inlined, but the results were not very impressive so the patch stalled. Looks like I should take another look at it! -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12150#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler