Performance enhancements in TcFlatten.
authorRichard Eisenberg <eir@cis.upenn.edu>
Tue, 16 Dec 2014 21:35:43 +0000 (16:35 -0500)
committerRichard Eisenberg <eir@cis.upenn.edu>
Wed, 17 Dec 2014 15:47:17 +0000 (10:47 -0500)
commit922168fda3b3a3b96033a9c5d38f3fe70a99fd63
treecaa9d5a6e1995b42ca933623166a357f0e8dcc81
parentea22a8f721f440458554c7500686baef57da4d4d
Performance enhancements in TcFlatten.

This commit fixes some performance regressions introduced by 0cc47eb,
adding more `Coercible` magic to the solver. See Note
[flatten_many performance] in TcFlatten for more info.

The improvements do not quite restore the old numbers. Given that
the solver is really more involved now, I am accepting this regression.

The way forward (I believe) would be to have *two* flatteners: one
that deals only with nominal equalities and thus never checks roles,
and the more general one. A nice design of keeping this performant
without duplicating code eludes me, but someone else is welcome
to take a stab.
compiler/typecheck/TcFlatten.hs
compiler/utils/MonadUtils.hs
testsuite/tests/perf/compiler/all.T