[GHC] #13344: Core string literal patch regresses compiler performance considerably

GHC ghc-devs at haskell.org
Mon Feb 27 19:43:13 UTC 2017


#13344: Core string literal patch regresses compiler performance considerably
-------------------------------------+-------------------------------------
        Reporter:  bgamari           |                Owner:  bgamari
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.2.1
       Component:  Compiler          |              Version:  8.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 rwbarton):

 The patch in #8472 allows floating out unboxed string literals to top
 level in (at least) three places:

 1. In the "Floats" section in SimplEnv we float a let out of a let. If the
 body of the let is a lambda then we can increase the arity of the original
 binding, which is a good thing. This is the optimization that was allowed
 in the example of #8472 by letting the unboxed string literal float to the
 top level.

 2. In `prepareRhs` in Simplify we can float, for example, an argument out
 of a constructor. In general this brings us closer to ANF, but when the
 argument is a literal it is trivial already; and the data representation
 we generate for `Ptr "blob"#` is just fine.

 3. In the float out pass we can float out an expression to avoid repeated
 allocation or evaluation. But there is no allocation or evaluation
 associated to an unboxed literal.

 In
 https://github.com/ghc/ghc/commit/8f99cfa49be0fc0767f0c73967ff2472de5cfcd6
 I've tried disabling the above items 2 and 3 for unboxed string literals.
 It still produces the desired code in the example of #8472, but it no
 longer floats the string literals out of, for example, `$trModule`
 bindings. I'm waiting to see what perf.haskell.org thinks about it.

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


More information about the ghc-tickets mailing list