Fix quadratic behavior of prepareAlts
authorBartosz Nitka <niteria@gmail.com>
Sat, 13 Jan 2018 02:02:22 +0000 (02:02 +0000)
committerBartosz Nitka <niteria@gmail.com>
Mon, 15 Jan 2018 20:35:58 +0000 (20:35 +0000)
commitcf2c029ccdb967441c85ffb66073974fbdb20c20
tree482348d44a33f174a8d152bb5830e404e1f9c87f
parent8de8930520dce26ffa4fa1e67a977213de667e16
Fix quadratic behavior of prepareAlts

Summary:
This code is quadratic and a simple test case I used
managed to tickle it.

The example (same one as #14667) looks like this:
```
module A10000 where

 data A = A
   | A00001
   | A00002
 ...
   | A10000

 f :: A -> Int
 f A00001 = 19900001
 f A00002 = 19900002
 ...
 f A10000 = 19910000
```

Applied on top of a fix for #14667, it gives a 30% compile time
improvement.

Test Plan: ./validate

Reviewers: simonpj, bgamari

Subscribers: rwbarton, thomie, simonmar, carter

Differential Revision: https://phabricator.haskell.org/D4307
compiler/coreSyn/CoreUtils.hs