summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/main/DynFlags.hs14
-rw-r--r--docs/users_guide/flags.xml18
-rw-r--r--docs/users_guide/using.xml20
3 files changed, 47 insertions, 5 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 31886581f3..adee72356d 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -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 ),
diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml
index afec9bdccf..5eb6025639 100644
--- a/docs/users_guide/flags.xml
+++ b/docs/users_guide/flags.xml
@@ -1371,6 +1371,13 @@
</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>
<entry>dynamic</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>
diff --git a/docs/users_guide/using.xml b/docs/users_guide/using.xml
index 5ad34faf53..eb6b0c00b8 100644
--- a/docs/users_guide/using.xml
+++ b/docs/users_guide/using.xml
@@ -1667,6 +1667,26 @@ f "2" = 2
<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>
<indexterm><primary><option>-fspec-constr</option></primary></indexterm>
</term>