Make it possible to have different UniqSupply strategies
authorBartosz Nitka <niteria@gmail.com>
Tue, 27 Oct 2015 14:17:32 +0000 (15:17 +0100)
committerBen Gamari <ben@smart-cactus.org>
Tue, 27 Oct 2015 14:20:38 +0000 (15:20 +0100)
commit158d2a91581d82dc1690a858b474eaab3a02e43e
tree178aad1b3bcb80923d2376e784f3e87074dd5821
parentd1d8704cb3d003315177fad1394fce49f98fb1a2
Make it possible to have different UniqSupply strategies

To get reproducible/deterministic builds, the way that the Uniques are
assigned shouldn't matter. This allows to test for that.

It add 2 new flags:

* `-dinitial-unique`
* `-dunique-increment`

And by varying these you can get interesting effects:

* `-dinitial-unique=0 -dunique-increment 1` - current sequential
  UniqSupply

* `-dinitial-unique=16777215 -dunique-increment -1` - UniqSupply that
  generates in decreasing order

* `-dinitial-unique=1 -dunique-increment PRIME` - where PRIME big enough
  to overflow often - nonsequential order

I haven't proven the usefullness of the last one yet and it's the reason
why we have to mask the bits with `0xFFFFFF` in `genSym`, so I can
remove it if it becomes contentious.

Test Plan: validate on harbormaster

Reviewers: simonmar, austin, ezyang, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1360

GHC Trac Issues: #4012
compiler/basicTypes/UniqSupply.hs
compiler/cbits/genSym.c
compiler/main/DynFlags.hs
docs/users_guide/debugging.rst
ghc/Main.hs