DmdAnal: Add a final, safe iteration
authorJoachim Breitner <mail@joachim-breitner.de>
Thu, 7 Jul 2016 09:23:48 +0000 (11:23 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Thu, 25 Aug 2016 16:17:16 +0000 (18:17 +0200)
commit8d92b88df7c1c04606c8a9e12c1d4bee65c990e4
treec00eb34c88b48ec5cb6f1410eb7cee750a247911
parent7a86f58436434e7228efc7bd88a18230de104825
DmdAnal: Add a final, safe iteration

this fixes #12368.

It also refactors dmdFix a bit, removes some redundancies (such as
passing around an strictness signature right next to an id, when that id
is guaranteed to have been annotated with that strictness signature).

Note that when fixed-point iteration does not terminate, we
conservatively delete their strictness signatures (set them to nopSig).
But this loses the information on how its strict free variables are
used!

Lazily used variables already escape via lazy_fvs. We ensure that in the
case of an aborted fixed-point iteration, also the strict variables are
put there (with a conservative demand of topDmd).

Differential Revision: https://phabricator.haskell.org/D2392
compiler/basicTypes/Demand.hs
compiler/basicTypes/VarEnv.hs
compiler/stranal/DmdAnal.hs
compiler/utils/UniqFM.hs
testsuite/tests/stranal/should_run/all.T