Add -fspec-constr-keen
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 27 Feb 2017 02:53:31 +0000 (21:53 -0500)
committerDavid Feuer <David.Feuer@gmail.com>
Mon, 27 Feb 2017 02:54:30 +0000 (21:54 -0500)
commit4f38fa100091152e6497db384af1fecd628e11e5
tree0c2ab15e62ea6d9023bf6a064e807ca7b16c1f74
parente4188b538bfc879b201d416cf1d68ff7072c577f
Add -fspec-constr-keen

I discovered that the dramatic imprvoement in perf/should_run/T9339
with the introduction of join points was really rather a fluke, and
very fragile.

The real problem (see Note [Making SpecConstr keener]) is that
SpecConstr wasn't specialising a function even though it was applied
to a freshly-allocated constructor.  The paper describes plausible
reasons for this, but I think it may well be better to be a bit more
aggressive.

So this patch add -fspec-constr-keen, which makes SpecConstr a bit
keener to specialise, by ignoring whether or not the argument
corresponding to a call pattern is scrutinised in the function body.
Now the gains in T9339 should be robust; and it might even be a
better default.

I'd be interested in what happens if we switched on -fspec-constr-keen
with -O2.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3186
compiler/main/DynFlags.hs
compiler/specialise/SpecConstr.hs
docs/users_guide/using-optimisation.rst
testsuite/tests/perf/should_run/all.T