Skip to content

Make sure mkSplitUniqSupply stores the precomputed mask only.

Andreas Klebinger requested to merge AndreasK/ghc:uniqOpt into master

If you review this please make sure the test I added is sensible.

Make sure mkSplitUniqSupply stores the precompted mask only.

mkSplitUniqSupply was lazy on the boxed char.

This caused a bunch of issues:
* The closure captured the boxed Char
* The mask was recomputed on every split of the supply.
* It also caused the allocation of MkSplitSupply to happen in it's own
(allocated) closure. The reason of which I did not further investigate.

We know force the computation of the mask inside mkSplitUniqSupply.
* This way the mask is computed at most once per UniqSupply creation.
* It allows ww to kick in, causing the closure to retain the unboxed
value.

Requesting Uniques in a loop is now faster by about 20%.

I did not check the impact on the overall compiler, but I added a test
to avoid regressions.
Edited by Ben Gamari

Merge request reports