long compilation time for module with large data type and partial record selectors
in both ghc 7.6 and 7.8rc, the Constants module in LLVM-General-Pure (and a few other similar modules) have surprisingly long (and noticable!) compilation times.
This seems to related to how GHC handles a many constructor data type with overlapping field names.
the time is nearly the same for building a static module with O1 and O2
carter repoScratcher/bad-ast » time ghc Constant.hs -O2 1 ↵
[1 of 1] Compiling Constant ( Constant.hs, Constant.o )
ghc Constant.hs -O2 7.52s user 0.23s system 99% cpu 7.755 total
carter repoScratcher/bad-ast » time ghc Constant.hs -O1
[1 of 1] Compiling Constant ( Constant.hs, Constant.o )
ghc Constant.hs -O1 6.62s user 0.20s system 100% cpu 6.768 total
heck even with -O0 its slow (though not terrible)
carter repoScratcher/bad-ast » time ghc Constant.hs -O0
[1 of 1] Compiling Constant ( Constant.hs, Constant.o )
ghc Constant.hs -O0 2.76s user 0.14s system 101% cpu 2.873 total
Seems like there might something wrong in how we handle data types like this, the complexity need not
Trac metadata
Trac field | Value |
---|---|
Version | 7.8.1-rc1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |