[GHC] #14944: Compile speed regression

GHC ghc-devs at haskell.org
Thu Apr 19 15:44:01 UTC 2018


#14944: Compile speed regression
-------------------------------------+-------------------------------------
        Reporter:  br1               |                Owner:  dfeuer
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.4.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 dfeuer):

 In 7.8, Main starts compiling like this (from -dshow-passes):

 {{{
 Result size of Desugar (after optimization)
   = {terms: 3,973, types: 630,023, coercions: 196}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 3,384, types: 628,452, coercions: 5}
 Result size of Simplifier iteration=2
   = {terms: 3,386, types: 628,458, coercions: 5}
 Result size of Simplifier iteration=3
   = {terms: 3,384, types: 628,456, coercions: 5}
 Result size of Simplifier
   = {terms: 3,384, types: 628,456, coercions: 5}
 *** Specialise:
 Result size of Specialise
   = {terms: 4,785, types: 865,456, coercions: 5}
 }}}

 In 7.10, on the other hand, it starts like this:

 {{{
 Result size of Desugar (after optimization)
   = {terms: 3,973, types: 630,023, coercions: 196}
 *** Simplifier:
 Result size of Simplifier iteration=1
   = {terms: 4,362, types: 630,802, coercions: 196}
 Result size of Simplifier
   = {terms: 4,362, types: 630,802, coercions: 196}
 *** Specialise:
 Result size of Specialise
   = {terms: 12,088, types: 2,092,764, coercions: 392}
 }}}

 So 7.8 immediately tossed a slew of coercions in the first simplifier
 iteration, and the simplification otherwise kept sizes pretty much the
 same. In 7.10, we only do one round of simplification, the coercion count
 doesn't go down, the term count goes up a bit, and then specialization
 goes wild. No, I don't know what any of this really means.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14944#comment:16>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list