Efficient membership for home modules
authorBartosz Nitka <niteria@gmail.com>
Wed, 10 May 2017 11:36:52 +0000 (04:36 -0700)
committerBartosz Nitka <niteria@gmail.com>
Wed, 10 May 2017 11:37:26 +0000 (04:37 -0700)
commit26f509a992ebc6910ed2309b46f3f1d44efba7c9
treeab8b9a7f91f16046201d9957d9b015d74a6f38ac
parent22a03e7288129a165dc2cb866041185a06adb0e9
Efficient membership for home modules

This changes the linear lookup in a list to an efficient
lookup in an IntMap. The linear lookup effectively made
the algorithm quadratic, which for a test case that I have
(5000 modules) introduced significant slowdown.

I ran 3 experiments to estimate the impact of this:

"No-op", profiled, just `:load`: P146, `186s`
"before", profiled, `:load` followed by 10x `:r`: P147, `315s`
"after", profiled, `:load` followed by 10x `:r`: P148, `250s`

Going by the math of `(250-186)/(315-186) = 50%` this is a 2x improvement
on `:r`.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3562
compiler/main/GhcMake.hs