Commit eb51c441 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Document -fomit-interface-pragmas, -fignore-interface-pragmas

parent 701797c3
......@@ -1483,6 +1483,50 @@ f "2" = 2
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fno-state-hack</option>
<indexterm><primary><option>-fno-state-hack</option></primary></indexterm>
</term>
<listitem>
<para>Turn off the "state hack" whereby any lambda with a
<literal>State#</literal> token as argument is considered to be
single-entry, hence it is considered OK to inline things inside
it. This can improve performance of IO and ST monad code, but it
runs the risk of reducing sharing.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-fomit-interface-pragmas</option>
<indexterm><primary><option>-fomit-interface-pragmas</option></primary></indexterm>
</term>
<listitem>
<para>Tells GHC to omit all inessential information from the interface file
generated for the module being compiled (say M). This means that a module
importing M will see only the <emphasis>types</emphasis> of the functions that M exports, but not
their unfoldings, strictness info, etc. Hence, for example,
no function exported by M will be inlined
into an importing module. The benefit is that modules that import M will
need to be recompiled less often (only when M's exports change their type,
not when they change their implementation).
</para>
</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>-funbox-strict-fields</option>:
......@@ -1507,7 +1551,7 @@ f "2" = 2
<varlistentry>
<term>
<option>-funfolding-update-in-place&lt;n&gt;</option>
<option>-funfolding-update-in-place=<replaceable>n</replaceable></option>
<indexterm><primary><option>-funfolding-update-in-place</option></primary></indexterm>
</term>
<listitem>
......@@ -1525,7 +1569,7 @@ f "2" = 2
<varlistentry>
<term>
<option>-funfolding-creation-threshold&lt;n&gt;</option>:
<option>-funfolding-creation-threshold=<replaceable>n</replaceable></option>:
<indexterm><primary><option>-funfolding-creation-threshold</option></primary></indexterm>
<indexterm><primary>inlining, controlling</primary></indexterm>
<indexterm><primary>unfolding, controlling</primary></indexterm>
......@@ -1551,7 +1595,7 @@ f "2" = 2
</varlistentry>
<varlistentry>
<term><option>-funfolding-use-threshold&lt;n&gt;</option>:</term>
<term><option>-funfolding-use-threshold=<replaceable>n</replaceable></option></term>
<listitem>
<indexterm><primary><option>-funfolding-use-threshold</option></primary></indexterm>
<indexterm><primary>inlining, controlling</primary></indexterm>
......
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