Record selectors behaving badly wrt optimisation
The attached program performs much worse with HEAD as of today (and presumably also 6.10.1) than 6.8.3.
> ghc-6.8.3 --make -O2 bug.hs
[1 of 1] Compiling Main ( bug.hs, bug.o )
Linking bug ...
> time ./bug
1.17s real 1.17s user 0.01s system 99% ./bug
> ghc-6.11 --make -O2 bug.hs
[1 of 1] Compiling Main ( bug.hs, bug.o )
Linking bug ...
> time ./bug
1.58s real 1.58s user 0.01s system 99% ./bug
The problem appears to be in the code for delete, GHC has duplicated two calls to next.
Also note this is a version of the code we have in eyeball/IOList.lhs which illustrates some other problems in the current optimiser (although the other problems are not regressions, which is why I'm highlighting this one).
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.8.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |
Edited by Simon Peyton Jones