- -- The SimplifierSwitches should be delimited by "(" and ")".
-
- simpl_sep (opt1:opts) simpl_sw core_td stg_td
- = case (_UNPK_ opt1) of
- "(" -> simpl_sep opts simpl_sw core_td stg_td
- ")" -> let
- this_simpl = CoreDoSimplify (isAmongSimpl simpl_sw)
- in
- sep opts (this_simpl : core_td) stg_td
-
-# define SIMPL_SW(sw) simpl_sep opts (sw:simpl_sw) core_td stg_td
-
- -- the non-"just match a string" options are at the end...
- "-fshow-simplifier-progress" -> SIMPL_SW(ShowSimplifierProgress)
- "-fcode-duplication-ok" -> SIMPL_SW(SimplOkToDupCode)
- "-ffloat-lets-exposing-whnf" -> SIMPL_SW(SimplFloatLetsExposingWHNF)
- "-ffloat-primops-ok" -> SIMPL_SW(SimplOkToFloatPrimOps)
- "-falways-float-lets-from-lets" -> SIMPL_SW(SimplAlwaysFloatLetsFromLets)
- "-fdo-case-elim" -> SIMPL_SW(SimplDoCaseElim)
- "-fdo-eta-reduction" -> SIMPL_SW(SimplDoEtaReduction)
- "-fdo-lambda-eta-expansion" -> SIMPL_SW(SimplDoLambdaEtaExpansion)
- "-fdo-foldr-build" -> SIMPL_SW(SimplDoFoldrBuild)
- "-fdo-not-fold-back-append" -> SIMPL_SW(SimplDontFoldBackAppend)
- "-fdo-arity-expand" -> SIMPL_SW(SimplDoArityExpand)
- "-fdo-inline-foldr-build" -> SIMPL_SW(SimplDoInlineFoldrBuild)
- "-freuse-con" -> SIMPL_SW(SimplReuseCon)
- "-fcase-of-case" -> SIMPL_SW(SimplCaseOfCase)
- "-flet-to-case" -> SIMPL_SW(SimplLetToCase)
- "-fpedantic-bottoms" -> SIMPL_SW(SimplPedanticBottoms)
- "-fkeep-spec-pragma-ids" -> SIMPL_SW(KeepSpecPragmaIds)
- "-fkeep-unused-bindings" -> SIMPL_SW(KeepUnusedBindings)
- "-fmay-delete-conjurable-ids" -> SIMPL_SW(SimplMayDeleteConjurableIds)
- "-fessential-unfoldings-only" -> SIMPL_SW(EssentialUnfoldingsOnly)
- "-fignore-inline-pragma" -> SIMPL_SW(IgnoreINLINEPragma)
- "-fno-let-from-case" -> SIMPL_SW(SimplNoLetFromCase)
- "-fno-let-from-app" -> SIMPL_SW(SimplNoLetFromApp)
- "-fno-let-from-strict-let" -> SIMPL_SW(SimplNoLetFromStrictLet)
-
- o | starts_with_msi -> SIMPL_SW(MaxSimplifierIterations (read after_msi))
- | starts_with_suut -> SIMPL_SW(SimplUnfoldingUseThreshold (read after_suut))
- | starts_with_suct -> SIMPL_SW(SimplUnfoldingCreationThreshold (read after_suct))
- | starts_with_sucd -> SIMPL_SW(SimplUnfoldingConDiscount (read after_sucd))
- where
- maybe_suut = startsWith "-fsimpl-uf-use-threshold" o
- maybe_suct = startsWith "-fsimpl-uf-creation-threshold" o
- maybe_sucd = startsWith "-fsimpl-uf-con-discount" o
- maybe_msi = startsWith "-fmax-simplifier-iterations" o
- starts_with_suut = maybeToBool maybe_suut
- starts_with_suct = maybeToBool maybe_suct
- starts_with_sucd = maybeToBool maybe_sucd
- starts_with_msi = maybeToBool maybe_msi
- (Just after_suut) = maybe_suut
- (Just after_suct) = maybe_suct
- (Just after_sucd) = maybe_sucd
- (Just after_msi) = maybe_msi
-
- _ -> -- NB: the driver is really supposed to handle bad options
- simpl_sep opts simpl_sw core_td stg_td
+\begin{code}
+isStaticHscFlag f =
+ f `elem` [
+ "-fauto-sccs-on-all-toplevs",
+ "-fauto-sccs-on-exported-toplevs",
+ "-fauto-sccs-on-individual-cafs",
+ "-fauto-sccs-on-dicts",
+ "-fscc-profiling",
+ "-fticky-ticky",
+ "-fall-strict",
+ "-fdicts-strict",
+ "-fgenerics",
+ "-firrefutable-tuples",
+ "-fnumbers-strict",
+ "-fparallel",
+ "-fsmp",
+ "-fsemi-tagging",
+ "-ffoldr-build-on",
+ "-flet-no-escape",
+ "-funfold-casms-in-hi-file",
+ "-fusagesp-on",
+ "-funbox-strict-fields",
+ "-femit-extern-decls",
+ "-fglobalise-toplev-names",
+ "-fgransim",
+ "-fignore-asserts",
+ "-fignore-interface-pragmas",
+ "-fno-hi-version-check",
+ "-fno-implicit-prelude",
+ "-dno-black-holing",
+ "-fomit-interface-pragmas",
+ "-fno-pre-inlining",
+ "-fdo-eta-reduction",
+ "-fdo-lambda-eta-expansion",
+ "-fcase-of-case",
+ "-fcase-merge",
+ "-fpedantic-bottoms",
+ "-fexcess-precision",
+ "-funfolding-update-in-place",
+ "-freport-compile",
+ "-fno-prune-decls",
+ "-fno-prune-tydecls",
+ "-static",
+ "-funregisterised",
+ "-v" ]
+ || any (flip prefixMatch f) [
+ "-fcontext-stack",
+ "-fliberate-case-threshold",
+ "-fhi-version=",
+ "-fhistory-size",
+ "-funfolding-interface-threshold",
+ "-funfolding-creation-threshold",
+ "-funfolding-use-threshold",
+ "-funfolding-fun-discount",
+ "-funfolding-keeness-factor"
+ ]