[GHC] #14564: CAF isn't floated

GHC ghc-devs at haskell.org
Fri Dec 8 04:59:26 UTC 2017


#14564: CAF isn't floated
-------------------------------------+-------------------------------------
           Reporter:  neil.mayhew    |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.2.2
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Runtime
  Unknown/Multiple                   |  performance bug
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 In the following code, `pattern` isn't floated, and the execution time is
 20x slower than it should be:

 {{{#!hs
 import Text.Regex.TDFA (Regex, makeRegex, match)

 main :: IO ()
 main = do
     entries <- map parseFilename . lines <$> getContents
     let check (Right (_, t)) = last t == 'Z'
         check _ = False
     print $ all check entries

 parseFilename :: String -> Either String (String, String)
 parseFilename fn = case (pattern `match` fn :: [[String]]) of
     [[_, full, _, time]] -> Right $ (full, time)
     _ -> Left fn
   where
     pattern :: Regex
     pattern = makeRegex
         "^\\./duplicity-(full|inc|new)(-signatures)?\\.\
 \([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]Z)\\."
 }}}

 Curiously, it is floated when profiling is enabled, so the profiled
 program ends up being 7x faster than the unprofiled one.

 I can float the code manually (by taking out `where` and unindenting) and
 the program then runs at an acceptable speed.

 I get the same behaviour with 8.0.2, 8.2.1 and 8.2.2 but 7.10.3 is OK. I
 don't think the OS and architecture makes a difference, but for the record
 I'm on various flavours of 64-bit Linux.

 Test input data is
 [https://gist.github.com/neilmayhew/247a30738c0e294902e7c2830ca2c6f5 here]

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


More information about the ghc-tickets mailing list