This just disables the coercion optimiser, mainly for measurements in the paper
"fsimple-list-literals",
"fruntime-types",
"fno-pre-inlining",
"fsimple-list-literals",
"fruntime-types",
"fno-pre-inlining",
"fexcess-precision",
"static",
"fhardwire-lib-paths",
"fexcess-precision",
"static",
"fhardwire-lib-paths",
opt_PprCols,
opt_PprCaseAsLet,
opt_PprStyle_Debug, opt_TraceLevel,
opt_PprCols,
opt_PprCaseAsLet,
opt_PprStyle_Debug, opt_TraceLevel,
-- Suppressing boring aspects of core dumps
opt_SuppressAll,
-- Suppressing boring aspects of core dumps
opt_SuppressAll,
opt_CprOff,
opt_SimplNoPreInlining,
opt_SimplExcessPrecision,
opt_CprOff,
opt_SimplNoPreInlining,
opt_SimplExcessPrecision,
opt_MaxWorkerArgs,
-- Unfolding control
opt_MaxWorkerArgs,
-- Unfolding control
opt_NoDebugOutput :: Bool
opt_NoDebugOutput = lookUp (fsLit "-dno-debug-output")
opt_NoDebugOutput :: Bool
opt_NoDebugOutput = lookUp (fsLit "-dno-debug-output")
-- profiling opts
opt_SccProfilingOn :: Bool
opt_SccProfilingOn = lookUp (fsLit "-fscc-profiling")
-- profiling opts
opt_SccProfilingOn :: Bool
opt_SccProfilingOn = lookUp (fsLit "-fscc-profiling")
opt_SimplExcessPrecision :: Bool
opt_SimplExcessPrecision = lookUp (fsLit "-fexcess-precision")
opt_SimplExcessPrecision :: Bool
opt_SimplExcessPrecision = lookUp (fsLit "-fexcess-precision")
+opt_NoOptCoercion :: Bool
+opt_NoOptCoercion = lookUp (fsLit "-fno-opt-coercion")
+
-- Unfolding control
-- See Note [Discounts and thresholds] in CoreUnfold
-- Unfolding control
-- See Note [Discounts and thresholds] in CoreUnfold
import VarSet\r
import VarEnv\r
import PrelNames\r
import VarSet\r
import VarEnv\r
import PrelNames\r
+import StaticFlags ( opt_NoOptCoercion )\r
import Util\r
import Outputable\r
\end{code}\r
import Util\r
import Outputable\r
\end{code}\r
optCoercion :: TvSubst -> Coercion -> NormalCo\r
-- ^ optCoercion applies a substitution to a coercion, \r
-- *and* optimises it to reduce its size\r
optCoercion :: TvSubst -> Coercion -> NormalCo\r
-- ^ optCoercion applies a substitution to a coercion, \r
-- *and* optimises it to reduce its size\r
-optCoercion env co = opt_co env False co\r
+optCoercion env co \r
+ | opt_NoOptCoercion = substTy env co\r
+ | otherwise = opt_co env False co\r
\r
type NormalCo = Coercion\r
-- Invariants: \r
\r
type NormalCo = Coercion\r
-- Invariants: \r
+ <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><option>-feager-blackholing</option></entry>
<entry>Turn on <link linkend="parallel-compile-options">eager blackholing</link></entry>
<entry>dynamic</entry>