Commit b347eff0 authored by Simon Peyton Jones's avatar Simon Peyton Jones
Browse files

Document -fsimpl-tick-count

parent 3ed2e923
...@@ -1407,6 +1407,13 @@ ...@@ -1407,6 +1407,13 @@
<entry><option>-fno-case-merge</option></entry> <entry><option>-fno-case-merge</option></entry>
</row> </row>
<row>
<entry><option>-fcse</option></entry>
<entry>Turn on common sub-expression elimination. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-cse</entry>
</row>
<row> <row>
<entry><option>-fdicts-strict</option></entry> <entry><option>-fdicts-strict</option></entry>
<entry>Make dictionaries strict</entry> <entry>Make dictionaries strict</entry>
...@@ -1428,6 +1435,22 @@ ...@@ -1428,6 +1435,22 @@
<entry><option>-fno-do-lambda-eta-expansion</option></entry> <entry><option>-fno-do-lambda-eta-expansion</option></entry>
</row> </row>
<row>
<entry><option>-feager-blackholing</option></entry>
<entry>Turn on <link linkend="parallel-compile-options">eager blackholing</link></entry>
<entry>dynamic</entry>
<entry>-</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-enable-rewrite-rules</option></entry>
</row>
<row> <row>
<entry><option>-fexcess-precision</option></entry> <entry><option>-fexcess-precision</option></entry>
<entry>Enable excess intermediate precision</entry> <entry>Enable excess intermediate precision</entry>
...@@ -1435,6 +1458,20 @@ ...@@ -1435,6 +1458,20 @@
<entry><option>-fno-excess-precision</option></entry> <entry><option>-fno-excess-precision</option></entry>
</row> </row>
<row>
<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>-ffull-laziness</option></entry>
<entry>Turn on full laziness (floating bindings outwards). Implied by <option>-O</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-full-laziness</entry>
</row>
<row> <row>
<entry><option>-fignore-asserts</option></entry> <entry><option>-fignore-asserts</option></entry>
<entry>Ignore assertions in the source</entry> <entry>Ignore assertions in the source</entry>
...@@ -1450,26 +1487,17 @@ ...@@ -1450,26 +1487,17 @@
</row> </row>
<row> <row>
<entry><option>-fomit-interface-pragmas</option></entry> <entry><option>-fliberate-case</option></entry>
<entry>Don't generate interface pragmas</entry> <entry>Turn on the liberate-case transformation. Implied by <option>-O2</option>.</entry>
<entry>dynamic</entry> <entry>dynamic</entry>
<entry><option>-fno-omit-interface-pragmas</option></entry> <entry>-fno-liberate-case</entry>
</row> </row>
<row> <row>
<entry><option>-fmax-worker-args</option></entry> <entry><option>-fliberate-case-threshold</option>=<replaceable>n</replaceable></entry>
<entry>If a worker has that many arguments, none will be <entry>Set the size threshold for the liberate-case transformation to <replaceable>n</replaceable> (default: 200)</entry>
unpacked anymore (default: 10)</entry>
<entry>static</entry> <entry>static</entry>
<entry>-</entry> <entry><option>-fno-liberate-case-threshold</option></entry>
</row>
<row>
<entry><option>-fsimplifier-phases</option></entry>
<entry>Set the number of phases for the simplifier (default 2).
Ignored with <option>-O0</option>.</entry>
<entry>dynamic</entry>
<entry>-</entry>
</row> </row>
<row> <row>
...@@ -1480,65 +1508,57 @@ ...@@ -1480,65 +1508,57 @@
</row> </row>
<row> <row>
<entry><option>-fno-state-hack</option></entry> <entry><option>-fmax-worker-args</option></entry>
<entry>Turn off the "state hack" whereby any lambda with a real-world state token <entry>If a worker has that many arguments, none will be
as argument is considered to be single-entry. Hence OK to inline things inside it.</entry> unpacked anymore (default: 10)</entry>
<entry>static</entry> <entry>static</entry>
<entry>-</entry> <entry>-</entry>
</row> </row>
<row> <row>
<entry><option>-fcse</option></entry> <entry><option>-fno-opt-coercion</option></entry>
<entry>Turn on common sub-expression elimination. Implied by <option>-O</option>.</entry> <entry>Turn off the coercion optimiser</entry>
<entry>dynamic</entry> <entry>static</entry>
<entry>-fno-cse</entry> <entry>-</entry>
</row> </row>
<row> <row>
<entry><option>-fspecialise</option></entry> <entry><option>-fno-pre-inlining</option></entry>
<entry>Turn on specialisation of overloaded functions. Implied by <option>-O</option>.</entry> <entry>Turn off pre-inlining</entry>
<entry>dynamic</entry> <entry>static</entry>
<entry>-fno-specialise</entry> <entry>-</entry>
</row> </row>
<row> <row>
<entry><option>-ffull-laziness</option></entry> <entry><option>-fno-state-hack</option></entry>
<entry>Turn on full laziness (floating bindings outwards). Implied by <option>-O</option>.</entry> <entry>Turn off the "state hack" whereby any lambda with a real-world state token
<entry>dynamic</entry> as argument is considered to be single-entry. Hence OK to inline things inside it.</entry>
<entry>-fno-full-laziness</entry> <entry>static</entry>
<entry>-</entry>
</row> </row>
<row> <row>
<entry><option>-ffloat-in</option></entry> <entry><option>-fomit-interface-pragmas</option></entry>
<entry>Turn on the float-in transformation. Implied by <option>-O</option>.</entry> <entry>Don't generate interface pragmas</entry>
<entry>dynamic</entry> <entry>dynamic</entry>
<entry>-fno-float-in</entry> <entry><option>-fno-omit-interface-pragmas</option></entry>
</row> </row>
<row> <row>
<entry><option>-fenable-rewrite-rules</option></entry> <entry><option>-fsimplifier-phases</option></entry>
<entry>Switch on all rewrite rules (including rules <entry>Set the number of phases for the simplifier (default 2).
generated by automatic specialisation of overloaded functions). Ignored with <option>-O0</option>.</entry>
Implied by <option>-O</option>. </entry>
<entry>dynamic</entry> <entry>dynamic</entry>
<entry><option>-fno-enable-rewrite-rules</option></entry> <entry>-</entry>
</row> </row>
<row> <row>
<entry><option>-fstrictness</option></entry> <entry><option>-fsimpl-tick-factor=<replaceable>n</replaceable></option></entry>
<entry>Turn on strictness analysis. Implied by <option>-O</option>.</entry> <entry>Set the percentage factor for simplifier ticks (default 100)</entry>
<entry>dynamic</entry> <entry>dynamic</entry>
<entry>-fno-strictness</entry> <entry>-</entry>
</row> </row>
<row>
<entry><option>-fstrictness=before</option>=<replaceable>n</replaceable></entry>
<entry>Run an additional strictness analysis before simplifier
phase <replaceable>n</replaceable></entry>
<entry>dynamic</entry>
<entry>-</entry>
</row>
<row> <row>
<entry><option>-fspec-constr</option></entry> <entry><option>-fspec-constr</option></entry>
<entry>Turn on the SpecConstr transformation. Implied by <option>-O2</option>.</entry> <entry>Turn on the SpecConstr transformation. Implied by <option>-O2</option>.</entry>
...@@ -1563,24 +1583,32 @@ phase <replaceable>n</replaceable></entry> ...@@ -1563,24 +1583,32 @@ phase <replaceable>n</replaceable></entry>
</row> </row>
<row> <row>
<entry><option>-fliberate-case</option></entry> <entry><option>-fspecialise</option></entry>
<entry>Turn on the liberate-case transformation. Implied by <option>-O2</option>.</entry> <entry>Turn on specialisation of overloaded functions. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry> <entry>dynamic</entry>
<entry>-fno-liberate-case</entry> <entry>-fno-specialise</entry>
</row> </row>
<row> <row>
<entry><option>-fstatic-argument-transformation</option></entry> <entry><option>-fstrictness</option></entry>
<entry>Turn on the static argument transformation. Implied by <option>-O2</option>.</entry> <entry>Turn on strictness analysis. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry> <entry>dynamic</entry>
<entry>-fno-static-argument-transformation</entry> <entry>-fno-strictness</entry>
</row> </row>
<row>
<entry><option>-fstrictness=before</option>=<replaceable>n</replaceable></entry>
<entry>Run an additional strictness analysis before simplifier
phase <replaceable>n</replaceable></entry>
<entry>dynamic</entry>
<entry>-</entry>
</row>
<row> <row>
<entry><option>-fliberate-case-threshold</option>=<replaceable>n</replaceable></entry> <entry><option>-fstatic-argument-transformation</option></entry>
<entry>Set the size threshold for the liberate-case transformation to <replaceable>n</replaceable> (default: 200)</entry> <entry>Turn on the static argument transformation. Implied by <option>-O2</option>.</entry>
<entry>static</entry> <entry>dynamic</entry>
<entry><option>-fno-liberate-case-threshold</option></entry> <entry>-fno-static-argument-transformation</entry>
</row> </row>
<row> <row>
...@@ -1618,26 +1646,6 @@ phase <replaceable>n</replaceable></entry> ...@@ -1618,26 +1646,6 @@ phase <replaceable>n</replaceable></entry>
<entry><option>-fno-unfolding-use-threshold</option></entry> <entry><option>-fno-unfolding-use-threshold</option></entry>
</row> </row>
<row>
<entry><option>-fno-pre-inlining</option></entry>
<entry>Turn off pre-inlining</entry>
<entry>static</entry>
<entry>-</entry>
</row>
<row>
<entry><option>-fno-opt-coercion</option></entry>
<entry>Turn off the coercion optimiser</entry>
<entry>static</entry>
<entry>-</entry>
</row>
<row>
<entry><option>-feager-blackholing</option></entry>
<entry>Turn on <link linkend="parallel-compile-options">eager blackholing</link></entry>
<entry>dynamic</entry>
<entry>-</entry>
</row>
</tbody> </tbody>
</tgroup> </tgroup>
</informaltable> </informaltable>
......
...@@ -1753,6 +1753,28 @@ f "2" = 2 ...@@ -1753,6 +1753,28 @@ f "2" = 2
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>-fignore-interface-pragmas</option>
<indexterm><primary><option>-fignore-interface-pragmas</option></primary></indexterm>
</term>
<listitem>
<para>Tells GHC to ignore all inessential information when reading interface files.
That is, even if <filename>M.hi</filename> contains unfolding or strictness information
for a function, GHC will ignore that information.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fliberate-case</option>
<indexterm><primary><option>-fliberate-case</option></primary></indexterm>
</term>
<listitem>
<para>Turn on the liberate-case transformation.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>-fno-cse</option> <option>-fno-cse</option>
...@@ -1818,36 +1840,6 @@ f "2" = 2 ...@@ -1818,36 +1840,6 @@ f "2" = 2
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>-fspec-constr</option>
<indexterm><primary><option>-fspec-constr</option></primary></indexterm>
</term>
<listitem>
<para>Turn on call-pattern specialisation.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fliberate-case</option>
<indexterm><primary><option>-fliberate-case</option></primary></indexterm>
</term>
<listitem>
<para>Turn on the liberate-case transformation.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fstatic-argument-transformation</option>
<indexterm><primary><option>-fstatic-argument-transformation</option></primary></indexterm>
</term>
<listitem>
<para>Turn on the static argument transformation.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>-fno-state-hack</option> <option>-fno-state-hack</option>
...@@ -1882,13 +1874,43 @@ f "2" = 2 ...@@ -1882,13 +1874,43 @@ f "2" = 2
<varlistentry> <varlistentry>
<term> <term>
<option>-fignore-interface-pragmas</option> <option>-fsimpl-tick-factor=<replaceable>n</replaceable></option>
<indexterm><primary><option>-fignore-interface-pragmas</option></primary></indexterm> <indexterm><primary><option>-fsimpl-tick-factor</option></primary></indexterm>
</term> </term>
<listitem> <listitem>
<para>Tells GHC to ignore all inessential information when reading interface files. <para>GHC's optimiser can diverge if you write rewrite rules (<xref linkend="rewrite-rules"/>)
That is, even if <filename>M.hi</filename> contains unfolding or strictness information that don't terminate, or (less satisfactorily) if you
for a function, GHC will ignore that information.</para> code up recursion through data types
(<xref linkend="bugs-ghc"/>). To avoid making the compiler fall into an infinite
loop, the optimiser carries a "tick count" and stops inlining and applying rewrite rules
when this count is exceeded. The limit is set as a multiple of the program size, so
bigger programs get more ticks. The <option>-fsimpl-tick-factor</option> flag lets
you change the multiplier. The default is 100; numbers larger than 100 give more ticks,
and numbers smaller than 100 give fewer.</para>
<para>If the tick-count expires, GHC summarises what simplifier steps it has done;
you can use <option>-fddump-simpl-stats</option> to generate a much more detailed list.
Usually that identifies the loop quite accurately, because some numbers are very large.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fstatic-argument-transformation</option>
<indexterm><primary><option>-fstatic-argument-transformation</option></primary></indexterm>
</term>
<listitem>
<para>Turn on the static argument transformation.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fspec-constr</option>
<indexterm><primary><option>-fspec-constr</option></primary></indexterm>
</term>
<listitem>
<para>Turn on call-pattern specialisation.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
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