[GHC] #10528: compile time performance regression with OverloadedStrings and Text

GHC ghc-devs at haskell.org
Thu Jul 30 09:58:34 UTC 2015


#10528: compile time performance regression with OverloadedStrings and Text
-------------------------------------+-------------------------------------
        Reporter:  jakewheat         |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  high              |               Milestone:  7.10.3
       Component:  Compiler          |                 Version:  7.10.2-rc2
      Resolution:                    |                Keywords:
Operating System:  Linux             |            Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by simonpj):

 When rewriting in a rule (or unfolding), GHC sets the phase to the
 activation phase of the rule (or unfolding); in this case [2].  Now, from
 comment:13, it was clear that I believed that rule `unpack` was switched
 off before (the new) `TEXT literal` was switched on.  But I was wrong:
 `unpack` is active anytime before phase 1, and hence is active in phase 2;
 so the two still compete.

 I should have said
 {{{
 {-# RULES [1] "TEXT literal" forall a.
     unstream (S.map safe (S.streamList (GHC.unpackCString# a)))
       = unpackCString# a #-}

 }}}
 Now `TEXT literal` won't be active until phase 1, by which time `unpack`
 is switched off.

 Try that. How annoying.

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


More information about the ghc-tickets mailing list