Provide Uniquable version of SCC
authorBartosz Nitka <niteria@gmail.com>
Tue, 14 Jun 2016 10:28:30 +0000 (03:28 -0700)
committerBartosz Nitka <niteria@gmail.com>
Thu, 23 Jun 2016 14:53:12 +0000 (07:53 -0700)
commit35d1564cea2e611a4fecf24f09eff83f8a55af1c
tree5d46f89500052d356bf68e2befd6bf854550193a
parent7fc20b02b20c97209b97f0e36d34a4ef40f537a4
Provide Uniquable version of SCC

We want to remove the `Ord Unique` instance because there's
no way to implement it in deterministic way and it's too
easy to use by accident.

We sometimes compute SCC for datatypes whose Ord instance
is implemented in terms of Unique. The Ord constraint on
SCC is just an artifact of some internal data structures.
We can have an alternative implementation with a data
structure that uses Uniquable instead.

This does exactly that and I'm pleased that I didn't have
to introduce any duplication to do that.

Test Plan:
./validate
I looked at performance tests and it's a tiny bit better.

Reviewers: bgamari, simonmar, ezyang, austin, goldfire

Subscribers: thomie

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

GHC Trac Issues: #4012
18 files changed:
compiler/basicTypes/NameEnv.hs
compiler/cmm/CmmBuildInfoTables.hs
compiler/codeGen/StgCmmUtils.hs
compiler/iface/MkIface.hs
compiler/main/GhcMake.hs
compiler/nativeGen/AsmCodeGen.hs
compiler/nativeGen/RegAlloc/Linear/JoinToTargets.hs
compiler/nativeGen/RegAlloc/Liveness.hs
compiler/rename/RnSource.hs
compiler/simplCore/OccurAnal.hs
compiler/typecheck/TcBinds.hs
compiler/typecheck/TcEvidence.hs
compiler/typecheck/TcSMonad.hs
compiler/typecheck/TcTyDecls.hs
compiler/types/Type.hs
compiler/utils/Digraph.hs
compiler/vectorise/Vectorise/Type/Classify.hs
testsuite/tests/determinism/determinism001.hs