Commit 3bde199c authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Add flags -fno-specialise, -fno-float-in, and document them

It turned out that we lacked flags to switch off these two passes,
so I added them.
parent c3f199df
......@@ -263,6 +263,8 @@ data DynFlag
-- optimisation opts
| Opt_Strictness
| Opt_FullLaziness
| Opt_FloatIn
| Opt_Specialise
| Opt_StaticArgumentTransformation
| Opt_CSE
| Opt_LiberateCase
......@@ -890,6 +892,8 @@ optLevelFlags
, ([1,2], Opt_Strictness)
, ([1,2], Opt_CSE)
, ([1,2], Opt_FullLaziness)
, ([1,2], Opt_Specialise)
, ([1,2], Opt_FloatIn)
, ([2], Opt_LiberateCase)
, ([2], Opt_SpecConstr)
......@@ -1051,6 +1055,8 @@ getCoreToDo dflags
max_iter = maxSimplIterations dflags
strictness = dopt Opt_Strictness dflags
full_laziness = dopt Opt_FullLaziness dflags
do_specialise = dopt Opt_Specialise dflags
do_float_in = dopt Opt_FloatIn dflags
cse = dopt Opt_CSE dflags
spec_constr = dopt Opt_SpecConstr dflags
liberate_case = dopt Opt_LiberateCase dflags
......@@ -1125,7 +1131,7 @@ getCoreToDo dflags
-- Specialisation is best done before full laziness
-- so that overloaded functions have all their dictionary lambdas manifest
CoreDoSpecialising,
runWhen do_specialise CoreDoSpecialising,
runWhen full_laziness (CoreDoFloatOutwards constantsOnlyFloatOutSwitches),
-- Was: gentleFloatOutSwitches
......@@ -1136,7 +1142,7 @@ getCoreToDo dflags
-- rewrite's allocation by 19%, and made 0.0% difference
-- to any other nofib benchmark
CoreDoFloatInwards,
runWhen do_float_in CoreDoFloatInwards,
simpl_phases,
......@@ -1177,7 +1183,7 @@ getCoreToDo dflags
-- succeed in commoning up things floated out by full laziness.
-- CSE used to rely on the no-shadowing invariant, but it doesn't any more
CoreDoFloatInwards,
runWhen do_float_in CoreDoFloatInwards,
maybe_rule_check 0,
......@@ -1689,6 +1695,8 @@ fFlags = [
( "warn-wrong-do-bind", Opt_WarnWrongDoBind, const Supported ),
( "print-explicit-foralls", Opt_PrintExplicitForalls, const Supported ),
( "strictness", Opt_Strictness, const Supported ),
( "specialise", Opt_Specialise, const Supported ),
( "float-in", Opt_FloatIn, const Supported ),
( "static-argument-transformation", Opt_StaticArgumentTransformation, const Supported ),
( "full-laziness", Opt_FullLaziness, const Supported ),
( "liberate-case", Opt_LiberateCase, const Supported ),
......
......@@ -1370,6 +1370,13 @@
<entry>-fno-cse</entry>
</row>
<row>
<entry><option>-fspecialise</option></entry>
<entry>Turn on specialisation of overloaded functions. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-specialise</entry>
</row>
<row>
<entry><option>-ffull-laziness</option></entry>
<entry>Turn on full laziness (floating bindings outwards). Implied by <option>-O</option>.</entry>
......@@ -1378,12 +1385,19 @@
</row>
<row>
<entry><option>-frewrite-rules</option></entry>
<entry><option>-ffloat-in</option></entry>
<entry>Turn on the float-in transformation. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-float-in</entry>
</row>
<row>
<entry><option>-fenable-rewrite-rules</option></entry>
<entry>Switch on all rewrite rules (including rules
generated by automatic specialisation of overloaded functions).
Implied by <option>-O</option>. </entry>
<entry>dynamic</entry>
<entry><option>-fno-rewrite-rules</option></entry>
<entry><option>-fno-enable-rewrite-rules</option></entry>
</row>
<row>
......
......@@ -1665,6 +1665,26 @@ f "2" = 2
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fno-float-in</option>
<indexterm><primary><option>-fno-float-in</option></primary></indexterm>
</term>
<listitem>
<para>Turns off the float-in transformation.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fno-specialise</option>
<indexterm><primary><option>-fno-specialise</option></primary></indexterm>
</term>
<listitem>
<para>Turns off the automatic specialisation of overloaded functions.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fspec-constr</option>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment