[project @ 2000-04-03 12:50:25 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / CmdLineOpts.lhs
index 3101d02..77cc791 100644 (file)
@@ -43,6 +43,7 @@ module CmdLineOpts (
        opt_D_show_passes,
        opt_D_dump_rn_trace,
        opt_D_dump_rn_stats,
+        opt_D_dump_stix,
        opt_D_source_stats,
        opt_D_verbose_core2core,
        opt_D_verbose_stg2stg,
@@ -67,13 +68,13 @@ module CmdLineOpts (
        opt_WarnUnusedBinds,
        opt_WarnUnusedImports,
        opt_WarnUnusedMatches,
+       opt_WarnDeprecations,
 
        -- profiling opts
        opt_AutoSccsOnAllToplevs,
        opt_AutoSccsOnExportedToplevs,
        opt_AutoSccsOnIndividualCafs,
        opt_AutoSccsOnDicts,
-       opt_SccGroup,
        opt_SccProfilingOn,
        opt_DoTickyProfiling,
 
@@ -87,6 +88,7 @@ module CmdLineOpts (
        opt_IrrefutableTuples,
        opt_NumbersStrict,
        opt_Parallel,
+       opt_SMP,
 
        -- optimisation opts
        opt_DoEtaReduction,
@@ -114,7 +116,6 @@ module CmdLineOpts (
        opt_UF_KeenessFactor,
        opt_UF_CheapOp,
        opt_UF_DearOp,
-       opt_UF_NoRepLit,
 
        -- misc opts
        opt_CompilingPrelude,
@@ -169,8 +170,7 @@ import PrelArr  ( Array(..) )
 \end{code}
 
 A command-line {\em switch} is (generally) either on or off; e.g., the
-``verbose'' (-v) switch is either on or off.  (The \tr{-G<group>}
-switch is an exception; it's set to a string, or nothing.)
+``verbose'' (-v) switch is either on or off.
 
 A list of {\em ToDo}s is things to be done in a particular part of
 processing.  A (fictitious) example for the Core-to-Core simplifier
@@ -206,7 +206,7 @@ data CoreToDo               -- These are diff core-to-core passes,
                        -- Each run of the simplifier can take a different
                        -- set of simplifier-specific flags.
   | CoreDoFloatInwards
-  | CoreDoFullLaziness
+  | CoreDoFloatOutwards Bool   -- True <=> float lambdas to top level
   | CoreLiberateCase
   | CoreDoPrintCore
   | CoreDoStaticArgs
@@ -221,7 +221,6 @@ data CoreToDo               -- These are diff core-to-core passes,
 \begin{code}
 data StgToDo
   = StgDoStaticArgs
-  | StgDoUpdateAnalysis
   | StgDoLambdaLift
   | StgDoMassageForProfiling  -- should be (next to) last
   -- There's also setStgVarInfo, but its absolute "lastness"
@@ -234,6 +233,7 @@ data SimplifierSwitch
   = MaxSimplifierIterations Int
   | SimplInlinePhase Int
   | DontApplyRules
+  | NoCaseOfCase
   | SimplLetToCase
 \end{code}
 
@@ -312,7 +312,7 @@ opt_D_dump_ds                       = opt_D_dump_most || lookUp  SLIT("-ddump-ds")
 opt_D_dump_flatC               = opt_D_dump_all  || lookUp  SLIT("-ddump-flatC")
 opt_D_dump_foreign             = opt_D_dump_most || lookUp  SLIT("-ddump-foreign-stubs")
 opt_D_dump_inlinings           = opt_D_dump_all  || lookUp  SLIT("-ddump-inlinings")
-opt_D_dump_occur_anal          = opt_D_dump_most || lookUp  SLIT("-ddump-occur-anal")
+opt_D_dump_occur_anal          = opt_D_dump_all  || lookUp  SLIT("-ddump-occur-anal")
 opt_D_dump_parsed              = opt_D_dump_most || lookUp  SLIT("-ddump-parsed")
 opt_D_dump_realC               = opt_D_dump_all  || lookUp  SLIT("-ddump-realC")
 opt_D_dump_rn                  = opt_D_dump_most || lookUp  SLIT("-ddump-rn")
@@ -329,6 +329,7 @@ opt_D_dump_worker_wrapper   = opt_D_dump_most || lookUp  SLIT("-ddump-workwrap")
 opt_D_show_passes              = opt_D_dump_most || lookUp  SLIT("-dshow-passes")
 opt_D_dump_rn_trace            = opt_D_dump_all  || lookUp  SLIT("-ddump-rn-trace")
 opt_D_dump_rn_stats            = opt_D_dump_most || lookUp  SLIT("-ddump-rn-stats")
+opt_D_dump_stix                = opt_D_dump_all  || lookUp  SLIT("-ddump-stix")
 opt_D_dump_simpl_stats         = opt_D_dump_most || lookUp  SLIT("-ddump-simpl-stats")
 opt_D_source_stats             = opt_D_dump_most || lookUp  SLIT("-dsource-stats")
 opt_D_verbose_core2core                = opt_D_dump_all  || lookUp  SLIT("-dverbose-simpl")
@@ -355,13 +356,13 @@ opt_WarnTypeDefaults              = lookUp  SLIT("-fwarn-type-defaults")
 opt_WarnUnusedBinds            = lookUp  SLIT("-fwarn-unused-binds")
 opt_WarnUnusedImports          = lookUp  SLIT("-fwarn-unused-imports")
 opt_WarnUnusedMatches          = lookUp  SLIT("-fwarn-unused-matches")
+opt_WarnDeprecations           = lookUp  SLIT("-fwarn-deprecations")
 
 -- profiling opts
 opt_AutoSccsOnAllToplevs       = lookUp  SLIT("-fauto-sccs-on-all-toplevs")
 opt_AutoSccsOnExportedToplevs  = lookUp  SLIT("-fauto-sccs-on-exported-toplevs")
 opt_AutoSccsOnIndividualCafs   = lookUp  SLIT("-fauto-sccs-on-individual-cafs")
 opt_AutoSccsOnDicts            = lookUp  SLIT("-fauto-sccs-on-dicts")
-opt_SccGroup                   = lookup_str "-G="
 opt_SccProfilingOn             = lookUp  SLIT("-fscc-profiling")
 opt_DoTickyProfiling           = lookUp  SLIT("-fticky-ticky")
 
@@ -375,6 +376,7 @@ opt_IrrefutableTuples               = lookUp  SLIT("-firrefutable-tuples")
 opt_MaxContextReductionDepth   = lookup_def_int "-fcontext-stack" mAX_CONTEXT_REDUCTION_DEPTH
 opt_NumbersStrict              = lookUp  SLIT("-fnumbers-strict")
 opt_Parallel                   = lookUp  SLIT("-fparallel")
+opt_SMP                                = lookUp  SLIT("-fsmp")
 
 -- optimisation opts
 opt_DoEtaReduction             = lookUp  SLIT("-fdo-eta-reduction")
@@ -423,17 +425,16 @@ opt_SimplCaseMerge                = lookUp SLIT("-fcase-merge")
 opt_SimplPedanticBottoms       = lookUp SLIT("-fpedantic-bottoms")
 
 -- Unfolding control
-opt_UF_HiFileThreshold         = lookup_def_int "-funfolding-interface-threshold" (30::Int)
-opt_UF_CreationThreshold       = lookup_def_int "-funfolding-creation-threshold"  (30::Int)
+opt_UF_HiFileThreshold         = lookup_def_int "-funfolding-interface-threshold" (45::Int)
+opt_UF_CreationThreshold       = lookup_def_int "-funfolding-creation-threshold"  (45::Int)
 opt_UF_UseThreshold            = lookup_def_int "-funfolding-use-threshold"       (8::Int)     -- Discounts can be big
 opt_UF_ScrutConDiscount                = lookup_def_int "-funfolding-con-discount"        (2::Int)
 opt_UF_FunAppDiscount          = lookup_def_int "-funfolding-fun-discount"        (6::Int)     -- It's great to inline a fn
 opt_UF_PrimArgDiscount         = lookup_def_int "-funfolding-prim-discount"       (1::Int)
-opt_UF_KeenessFactor           = lookup_def_float "-funfolding-keeness-factor"    (2.0::Float)
+opt_UF_KeenessFactor           = lookup_def_float "-funfolding-keeness-factor"    (1.5::Float)
 
-opt_UF_CheapOp  = ( 0 :: Int)  -- Only one instruction; and the args are charged for
+opt_UF_CheapOp  = ( 1 :: Int)  -- Only one instruction; and the args are charged for
 opt_UF_DearOp   = ( 4 :: Int)
-opt_UF_NoRepLit = ( 20 :: Int) -- Strings can be pretty big
                        
 opt_ProduceS                   = lookup_str "-S="
 opt_ReportCompile               = lookUp SLIT("-freport-compile")
@@ -477,7 +478,8 @@ classifyOpts = sep argv [] [] -- accumulators...
                           simpl_sep opts defaultSimplSwitches core_td stg_td
 
          "-ffloat-inwards"  -> CORE_TD(CoreDoFloatInwards)
-         "-ffull-laziness"  -> CORE_TD(CoreDoFullLaziness)
+         "-ffloat-outwards"      -> CORE_TD(CoreDoFloatOutwards False)
+         "-ffloat-outwards-full" -> CORE_TD(CoreDoFloatOutwards True)
          "-fliberate-case"  -> CORE_TD(CoreLiberateCase)
          "-fcse"            -> CORE_TD(CoreCSE)
          "-fprint-core"     -> CORE_TD(CoreDoPrintCore)
@@ -489,7 +491,6 @@ classifyOpts = sep argv [] [] -- accumulators...
          "-fcpr-analyse"    -> CORE_TD(CoreDoCPResult)
 
          "-fstg-static-args" -> STG_TD(StgDoStaticArgs)
-         "-fupdate-analysis" -> STG_TD(StgDoUpdateAnalysis)
          "-dstg-stats"       -> STG_TD(D_stg_stats)
          "-flambda-lift"     -> STG_TD(StgDoLambdaLift)
          "-fmassage-stg-for-profiling" -> STG_TD(StgDoMassageForProfiling)
@@ -530,6 +531,7 @@ matchSimplSw opt
   = firstJust  [ matchSwInt  opt "-fmax-simplifier-iterations"         MaxSimplifierIterations
                , matchSwInt  opt "-finline-phase"                      SimplInlinePhase
                , matchSwBool opt "-fno-rules"                          DontApplyRules
+               , matchSwBool opt "-fno-case-of-case"                   NoCaseOfCase
                , matchSwBool opt "-flet-to-case"                       SimplLetToCase
                ]
 
@@ -549,8 +551,8 @@ matchSwInt opt str sw = case startsWith str opt of
 %*                                                                     *
 %************************************************************************
 
-In spite of the @Produce*@ and @SccGroup@ constructors, these things
-behave just like enumeration types.
+In spite of the @Produce*@ constructor, these things behave just like
+enumeration types.
 
 \begin{code}
 instance Eq SimplifierSwitch where
@@ -565,10 +567,11 @@ tagOf_SimplSwitch (SimplInlinePhase _)            = ILIT(1)
 tagOf_SimplSwitch (MaxSimplifierIterations _)  = ILIT(2)
 tagOf_SimplSwitch DontApplyRules               = ILIT(3)
 tagOf_SimplSwitch SimplLetToCase               = ILIT(4)
+tagOf_SimplSwitch NoCaseOfCase                 = ILIT(5)
 
 -- If you add anything here, be sure to change lAST_SIMPL_SWITCH_TAG, too!
 
-lAST_SIMPL_SWITCH_TAG = 4
+lAST_SIMPL_SWITCH_TAG = 5
 \end{code}
 
 %************************************************************************