long compilation time for module with large data type and partial record selectors
|Reported by:||carter||Owned by:|
|Type of failure:||Compile-time performance bug||Difficulty:||Unknown|
|Test Case:||Blocked By:|
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