Compress TypeMap TrieMap leaves with singleton constructor.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 6 Jan 2015 21:34:18 +0000 (13:34 -0800)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Wed, 7 Jan 2015 22:04:54 +0000 (14:04 -0800)
commitda64ab530512c36acd17c1dbcd3b5fcc681d128b
treec75894fafbde84bd6e7b3c4217a66f6325457815
parent471891cb774a58769018ed5df2120d15bddffd28
Compress TypeMap TrieMap leaves with singleton constructor.

Suppose we have a handful H of entries in a TrieMap, each with a very large
key, size K. If you fold over such a TrieMap you'd expect time O(H). That would
certainly be true of an association list! But with TrieMap we actually have to
navigate down a long singleton structure to get to the elements, so it takes
time O(K*H).  The point of a TrieMap is that you need to navigate to the point
where only one key remains, and then things should be fast.

This is a starting point: we can improve the patch by generalizing the
singleton constructor so it applies to CoercionMap and CoreMap; I'll do this
in a later commit.

Summary: Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>

Test Plan: validate

Reviewers: simonpj, austin

Subscribers: carter, thomie

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

GHC Trac Issues: #9960
compiler/coreSyn/TrieMap.hs
testsuite/tests/perf/compiler/all.T