Always expose unfoldings for overloaded functions. wip/all-inlinable
authorMatthew Pickering <matthewtpickering@gmail.com>
Sat, 6 Aug 2016 21:17:09 +0000 (22:17 +0100)
committerMatthew Pickering <matthewtpickering@gmail.com>
Mon, 9 Jan 2017 16:36:39 +0000 (16:36 +0000)
commit75cba70113e47fa4f3e60ab6d18594f7a6dfb1bc
tree948ab0829e6b35946bd2164add7ddf0bce662769
parent8c7250379d0d2bad1d07dfd556812ff7aa2c42e8
Always expose unfoldings for overloaded functions.

Summary:
Users expect their overloaded functions to be specialised at call sites,
however, this is only the case if they are either lucky and GHC chooses to
include the unfolding or they mark their definition with an INLINABLE pragma.
This leads to library authors marking all their functions with `INLINABLE` (or
more accurately `INLINE`) so they ensure that downstream consumers pay no cost
for their abstraction.

A more sensible default is to do this job for the library author and give more
predictable guarantees about specialisation.

Empirically, I compiled a selection of 1150 packages with (a similar) patch applied. The total size of the interface files before the patch was 519mb and after 634mb. On modern machines, I think this increase is justified for the result.

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

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

Conflicts:
compiler/specialise/Specialise.hs
compiler/main/TidyPgm.hs
compiler/specialise/Specialise.hs