From 140fb024a9f585c4f1d75ca4bd6fe37a97bc2a4f Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Thu, 31 Mar 2011 10:15:55 +0000 Subject: [PATCH] Add a new static flag -fno-opt-coercion This just disables the coercion optimiser, mainly for measurements in the paper --- compiler/main/StaticFlagParser.hs | 1 + compiler/main/StaticFlags.hs | 7 +++++-- compiler/types/OptCoercion.lhs | 5 ++++- docs/users_guide/flags.xml | 7 +++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/compiler/main/StaticFlagParser.hs b/compiler/main/StaticFlagParser.hs index 803baba..54f0a92 100644 --- a/compiler/main/StaticFlagParser.hs +++ b/compiler/main/StaticFlagParser.hs @@ -185,6 +185,7 @@ isStaticFlag f = "fsimple-list-literals", "fruntime-types", "fno-pre-inlining", + "fno-opt-coercion", "fexcess-precision", "static", "fhardwire-lib-paths", diff --git a/compiler/main/StaticFlags.hs b/compiler/main/StaticFlags.hs index 96f8b4b..049b61f 100644 --- a/compiler/main/StaticFlags.hs +++ b/compiler/main/StaticFlags.hs @@ -24,7 +24,7 @@ module StaticFlags ( opt_PprCols, opt_PprCaseAsLet, opt_PprStyle_Debug, opt_TraceLevel, - opt_NoDebugOutput, + opt_NoDebugOutput, -- Suppressing boring aspects of core dumps opt_SuppressAll, @@ -52,6 +52,7 @@ module StaticFlags ( opt_CprOff, opt_SimplNoPreInlining, opt_SimplExcessPrecision, + opt_NoOptCoercion, opt_MaxWorkerArgs, -- Unfolding control @@ -266,7 +267,6 @@ opt_Fuel = lookup_def_int "-dopt-fuel" maxBound opt_NoDebugOutput :: Bool opt_NoDebugOutput = lookUp (fsLit "-dno-debug-output") - -- profiling opts opt_SccProfilingOn :: Bool opt_SccProfilingOn = lookUp (fsLit "-fscc-profiling") @@ -320,6 +320,9 @@ opt_SimplNoPreInlining = lookUp (fsLit "-fno-pre-inlining") 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 diff --git a/compiler/types/OptCoercion.lhs b/compiler/types/OptCoercion.lhs index 0fff7ab..26f3295 100644 --- a/compiler/types/OptCoercion.lhs +++ b/compiler/types/OptCoercion.lhs @@ -19,6 +19,7 @@ import Var import VarSet import VarEnv import PrelNames +import StaticFlags ( opt_NoOptCoercion ) import Util import Outputable \end{code} @@ -50,7 +51,9 @@ mkCoPredTy in the ForAll case, where this note appears. optCoercion :: TvSubst -> Coercion -> NormalCo -- ^ optCoercion applies a substitution to a coercion, -- *and* optimises it to reduce its size -optCoercion env co = opt_co env False co +optCoercion env co + | opt_NoOptCoercion = substTy env co + | otherwise = opt_co env False co type NormalCo = Coercion -- Invariants: diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml index f5f949a..ad219cf 100644 --- a/docs/users_guide/flags.xml +++ b/docs/users_guide/flags.xml @@ -1551,6 +1551,13 @@ phase n + + Turn off the coercion optimiser + static + - + + + Turn on eager blackholing dynamic -- 1.7.10.4