[GHC] #14519: Exponential runtime performance regression in GHC 8.2 + Data.Text.Lazy + Text.RE.TDFA

GHC ghc-devs at haskell.org
Thu Jan 18 13:50:12 UTC 2018


#14519: Exponential runtime performance regression in GHC 8.2 + Data.Text.Lazy +
Text.RE.TDFA
-------------------------------------+-------------------------------------
        Reporter:  ntc2              |                Owner:  tdammers
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  8.2.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Runtime           |            Test Case:
  performance bug                    |  https://github.com/ntc2/ghc-8.2.1
                                     |  -regex-lazy-text-
                                     |  bug/tree/07b7bb32c6e90e8f2d2eada4b59943f37e632d53
      Blocked By:                    |             Blocking:
 Related Tickets:  #13745, #14564    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by tdammers):

 Neutering only these two rules also makes the problem go away:

 - LAZY TEXT take -> fused
 - LAZY TEXT drop -> fused

 Neutering only the first one (take -> fused), the problem persists.

 Neutering only the last one (drop -> fused), the problem disappears.

 In other words, it seems that the culprit is this rule, somewhere around
 line #1119 in Data.Text.Lazy.hs:

 {{{
 "LAZY TEXT drop -> fused" [~1] forall n t.
     drop n t = unstream (S.drop n (stream t))
 }}}

 Going to run a few more tests to make sure though.

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


More information about the ghc-tickets mailing list