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

Document -fsimpl-tick-count

parent 3ed2e923
......@@ -1407,6 +1407,13 @@
<entry><option>-fno-case-merge</option></entry>
</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>
<entry><option>-fdicts-strict</option></entry>
<entry>Make dictionaries strict</entry>
......@@ -1428,6 +1435,22 @@
<entry><option>-fno-do-lambda-eta-expansion</option></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>
<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>
<entry><option>-fexcess-precision</option></entry>
<entry>Enable excess intermediate precision</entry>
......@@ -1435,6 +1458,20 @@
<entry><option>-fno-excess-precision</option></entry>
</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>
<entry><option>-fignore-asserts</option></entry>
<entry>Ignore assertions in the source</entry>
......@@ -1450,26 +1487,17 @@
</row>
<row>
<entry><option>-fomit-interface-pragmas</option></entry>
<entry>Don't generate interface pragmas</entry>
<entry><option>-fliberate-case</option></entry>
<entry>Turn on the liberate-case transformation. Implied by <option>-O2</option>.</entry>
<entry>dynamic</entry>
<entry><option>-fno-omit-interface-pragmas</option></entry>
<entry>-fno-liberate-case</entry>
</row>
<row>
<entry><option>-fmax-worker-args</option></entry>
<entry>If a worker has that many arguments, none will be
unpacked anymore (default: 10)</entry>
<entry><option>-fliberate-case-threshold</option>=<replaceable>n</replaceable></entry>
<entry>Set the size threshold for the liberate-case transformation to <replaceable>n</replaceable> (default: 200)</entry>
<entry>static</entry>
<entry>-</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>
<entry><option>-fno-liberate-case-threshold</option></entry>
</row>
<row>
......@@ -1480,65 +1508,57 @@
</row>
<row>
<entry><option>-fno-state-hack</option></entry>
<entry>Turn off the "state hack" whereby any lambda with a real-world state token
as argument is considered to be single-entry. Hence OK to inline things inside it.</entry>
<entry><option>-fmax-worker-args</option></entry>
<entry>If a worker has that many arguments, none will be
unpacked anymore (default: 10)</entry>
<entry>static</entry>
<entry>-</entry>
</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>
<entry><option>-fno-opt-coercion</option></entry>
<entry>Turn off the coercion optimiser</entry>
<entry>static</entry>
<entry>-</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>
<entry><option>-fno-pre-inlining</option></entry>
<entry>Turn off pre-inlining</entry>
<entry>static</entry>
<entry>-</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>
<entry><option>-fno-state-hack</option></entry>
<entry>Turn off the "state hack" whereby any lambda with a real-world state token
as argument is considered to be single-entry. Hence OK to inline things inside it.</entry>
<entry>static</entry>
<entry>-</entry>
</row>
<row>
<entry><option>-ffloat-in</option></entry>
<entry>Turn on the float-in transformation. Implied by <option>-O</option>.</entry>
<entry><option>-fomit-interface-pragmas</option></entry>
<entry>Don't generate interface pragmas</entry>
<entry>dynamic</entry>
<entry>-fno-float-in</entry>
<entry><option>-fno-omit-interface-pragmas</option></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><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><option>-fno-enable-rewrite-rules</option></entry>
<entry>-</entry>
</row>
<row>
<entry><option>-fstrictness</option></entry>
<entry>Turn on strictness analysis. Implied by <option>-O</option>.</entry>
<entry><option>-fsimpl-tick-factor=<replaceable>n</replaceable></option></entry>
<entry>Set the percentage factor for simplifier ticks (default 100)</entry>
<entry>dynamic</entry>
<entry>-fno-strictness</entry>
<entry>-</entry>
</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>
<entry><option>-fspec-constr</option></entry>
<entry>Turn on the SpecConstr transformation. Implied by <option>-O2</option>.</entry>
......@@ -1563,24 +1583,32 @@ phase <replaceable>n</replaceable></entry>
</row>
<row>
<entry><option>-fliberate-case</option></entry>
<entry>Turn on the liberate-case transformation. Implied by <option>-O2</option>.</entry>
<entry><option>-fspecialise</option></entry>
<entry>Turn on specialisation of overloaded functions. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-liberate-case</entry>
<entry>-fno-specialise</entry>
</row>
<row>
<entry><option>-fstatic-argument-transformation</option></entry>
<entry>Turn on the static argument transformation. Implied by <option>-O2</option>.</entry>
<entry><option>-fstrictness</option></entry>
<entry>Turn on strictness analysis. Implied by <option>-O</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-static-argument-transformation</entry>
<entry>-fno-strictness</entry>
</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>
<entry><option>-fliberate-case-threshold</option>=<replaceable>n</replaceable></entry>
<entry>Set the size threshold for the liberate-case transformation to <replaceable>n</replaceable> (default: 200)</entry>
<entry>static</entry>
<entry><option>-fno-liberate-case-threshold</option></entry>
<entry><option>-fstatic-argument-transformation</option></entry>
<entry>Turn on the static argument transformation. Implied by <option>-O2</option>.</entry>
<entry>dynamic</entry>
<entry>-fno-static-argument-transformation</entry>
</row>
<row>
......@@ -1618,26 +1646,6 @@ phase <replaceable>n</replaceable></entry>
<entry><option>-fno-unfolding-use-threshold</option></entry>
</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>
</tgroup>
</informaltable>
......
......@@ -1753,6 +1753,28 @@ f "2" = 2
</listitem>
</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>
<term>
<option>-fno-cse</option>
......@@ -1818,36 +1840,6 @@ f "2" = 2
</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>
</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>
<term>
<option>-fno-state-hack</option>
......@@ -1882,13 +1874,43 @@ f "2" = 2
<varlistentry>
<term>
<option>-fignore-interface-pragmas</option>
<indexterm><primary><option>-fignore-interface-pragmas</option></primary></indexterm>
<option>-fsimpl-tick-factor=<replaceable>n</replaceable></option>
<indexterm><primary><option>-fsimpl-tick-factor</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>
<para>GHC's optimiser can diverge if you write rewrite rules (<xref linkend="rewrite-rules"/>)
that don't terminate, or (less satisfactorily) if you
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>
</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