Skip to content

Compiler performance bug: large "do" expression

From Neil Mitchell:

Using GHC 6.4.2 on Windows and 6.4.1 on Linux, I get really poor compile time performance for large do blocks - for example:

main = do
  return ()
  return ()
  ....
  return ()

The following are the compile times in seconds for a given number of return () lines, GHC 6.4.1 on Linux, with a very beefy processor (my department server) and loads of RAM.

100    1.444
200    4.054
300    7.977
400    13.967
500    21.265
600    30.71
700    43.997

For comparison on my desktop machine I get out of heap space with 268Mb of heap, in a few minutes for 700. Compared to Hugs and Yhc, which both deal with all of these files instantly.

By splitting the 700 line do block into 7 separate do blocks, each 100 lines, I get a compile time of 8.530.

The particular reason I was running into this issue was with an auto generated file of tests, about 360 lines of reasonably lines in a do block, which exhausted the memory in GHCi. I have modified my test generator to split the files into 50 line blocks.

Thanks

Neil

Trac metadata
Trac field Value
Version 6.4.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown
Architecture Unknown
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information