
#9233: Compiler performance regression ---------------------------------+------------------------------------ Reporter: augustss | Owner: Type: bug | Status: new Priority: low | Milestone: Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: Windows | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: ---------------------------------+------------------------------------ Comment (by rwbarton): Lennart's program seems to be hitting a strange behavior in the simplifier. I managed to extract a relatively simple test case on which ghc 7.8 is much slower than 7.6. With `-v3` I see output like this (may be for a slightly different version): {{{ ... *** Demand analysis: Result size of Demand analysis = {terms: 274, types: 282, coercions: 3} *** Worker Wrapper binds: Result size of Worker Wrapper binds = {terms: 642, types: 692, coercions: 3} *** Simplifier: Result size of Simplifier iteration=1 = {terms: 519, types: 669, coercions: 556} <---- !!! Result size of Simplifier iteration=2 = {terms: 285, types: 329, coercions: 3} Result size of Simplifier = {terms: 285, types: 329, coercions: 3} ... }}} The program is sensitive to changes in various ways. Doubling the number of fields in `X` doubles the number of coercions on that line, and increases ghc's runtime by a factor of about 16. Reducing the number of fields in `Options` to ten or fewer eliminates this spike in coercions completely! And changing `" "` to `""` eliminates the excess conversions, too. My laziness change to Pair seems to only help in this pathological case, and it slightly hurts on any other program I have tried. So better to track down and avoid this bad behavior in the simplifier, and leave `coercionKind` and friends alone, I think. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9233#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler