Be a bit more eager to inline in a strict context
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 27 Apr 2017 16:42:01 +0000 (17:42 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 28 Apr 2017 08:55:07 +0000 (09:55 +0100)
commit29d88ee173bc9b04245a33d5268dda032f5dc331
tree688151bb35bc2fca1a475507511735ad0d4f180c
parenta1b753e8b1475659440f524b3e66dfbea31c5787
Be a bit more eager to inline in a strict context

If we see f (g x), and f is strict, we want to be a bit more eager to
inline g, because it may well expose an eval (on x perhaps) that can
be eliminated or shared.

I saw this in nofib boyer2, function RewriteFuns.onewayunify1.  It
showed up as a consequence of the preceding patch that makes the
simplifier do less work (Trac #13379).  We had

   f d (g x)

where f was a class-op. Previously we simplified both d and
(g x) with a RuleArgCtxt (making g a bit more eager to inline).
But now we simplify only d that way, then fire the rule, and
only then simplify (g x).  Firing the rule produces a strict
funciion, so we want to make a strict function encourage
inlining a bit.
compiler/simplCore/SimplUtils.hs
compiler/simplCore/Simplify.hs
testsuite/tests/simplCore/should_compile/T12603.stdout