[project @ 1999-05-13 17:30:50 by simonm]
[ghc-hetmet.git] / ghc / compiler / main / CmdLineOpts.lhs
index 89c6fc8..bdc0bb6 100644 (file)
@@ -14,20 +14,15 @@ module CmdLineOpts (
        intSwitchSet,
        switchIsOn,
 
-       opt_AllStrict,
-        opt_AllowOverlappingInstances,
-       opt_AllowUndecidableInstances,
-       opt_AutoSccsOnAllToplevs,
-       opt_AutoSccsOnExportedToplevs,
-       opt_AutoSccsOnIndividualCafs,
-       opt_CompilingPrelude,
+       -- debugging opts
        opt_D_dump_absC,
        opt_D_dump_asm,
+       opt_D_dump_cpranal,
        opt_D_dump_deriv,
        opt_D_dump_ds,
        opt_D_dump_flatC,
-       opt_D_dump_inlinings,
        opt_D_dump_foreign,
+       opt_D_dump_inlinings,
        opt_D_dump_occur_anal,
        opt_D_dump_rdr,
        opt_D_dump_realC,
@@ -38,76 +33,103 @@ module CmdLineOpts (
        opt_D_dump_stg,
        opt_D_dump_stranal,
        opt_D_dump_tc,
+        opt_D_dump_usagesp,
+       opt_D_dump_worker_wrapper,
        opt_D_show_passes,
-       opt_D_show_rn_trace,
        opt_D_show_rn_imports,
+       opt_D_show_rn_stats,
+       opt_D_show_rn_trace,
        opt_D_simplifier_stats,
        opt_D_source_stats,
        opt_D_verbose_core2core,
        opt_D_verbose_stg2stg,
-       opt_DictsStrict,
        opt_DoCoreLinting,
        opt_DoStgLinting,
-       opt_DoSemiTagging,
-       opt_DoEtaReduction,
+        opt_DoUSPLinting,
+       opt_PprStyle_Debug,
+       opt_PprStyle_NoPrags,
+       opt_PprUserLength,
+
+       -- warning opts
+       opt_WarnDuplicateExports,
+       opt_WarnHiShadows,
+       opt_WarnIncompletePatterns,
+       opt_WarnMissingMethods,
+       opt_WarnMissingSigs,
+       opt_WarnNameShadowing,
+       opt_WarnOverlappingPatterns,
+       opt_WarnSimplePatterns,
+       opt_WarnTypeDefaults,
+       opt_WarnUnusedBinds,
+       opt_WarnUnusedImports,
+       opt_WarnUnusedMatches,
+
+       -- profiling opts
+       opt_AutoSccsOnAllToplevs,
+       opt_AutoSccsOnExportedToplevs,
+       opt_AutoSccsOnIndividualCafs,
+       opt_AutoSccsOnDicts,
+       opt_SccGroup,
+       opt_SccProfilingOn,
        opt_DoTickyProfiling,
+
+       -- language opts
+       opt_AllStrict,
+       opt_DictsStrict,
+        opt_MaxContextReductionDepth,
+        opt_AllowOverlappingInstances,
+       opt_AllowUndecidableInstances,
+       opt_GlasgowExts,
+       opt_IrrefutableTuples,
+       opt_NumbersStrict,
+       opt_Parallel,
+
+       -- optimisation opts
+       opt_DoEtaReduction,
+       opt_DoSemiTagging,
+       opt_FoldrBuildOn,
+       opt_InterfaceUnfoldThreshold,
+       opt_LiberateCaseThreshold,
+       opt_NoPreInlining,
+       opt_StgDoLetNoEscapes,
+       opt_UnfoldCasms,
+       opt_UnfoldingConDiscount,
+       opt_UnfoldingCreationThreshold,
+       opt_UnfoldingKeenessFactor,
+       opt_UnfoldingUseThreshold,
+        opt_UsageSPOn,
+       opt_UnboxStrictFields,
+
+       -- misc opts
+       opt_CompilingPrelude,
        opt_EmitCExternDecls,
        opt_EnsureSplittableC,
-       opt_FoldrBuildOn,
-       opt_GlasgowExts,
        opt_GranMacros,
        opt_HiMap,
        opt_HiVersion,
+       opt_IgnoreAsserts,
        opt_IgnoreIfacePragmas,
-       opt_IrrefutableTuples,
-       opt_LiberateCaseThreshold,
-        opt_MaxContextReductionDepth,
-       opt_MultiParamClasses,
         opt_NoHiCheck,
        opt_NoImplicitPrelude,
-       opt_NoPreInlining,
-       opt_NumbersStrict,
        opt_OmitBlackHoling,
        opt_OmitInterfacePragmas,
-       opt_PprStyle_NoPrags,
-       opt_PprStyle_Debug,
-       opt_PprUserLength,
        opt_ProduceC,
-       opt_ProduceHi,
-       opt_ProduceS,
        opt_ProduceExportCStubs,
        opt_ProduceExportHStubs,
+       opt_ProduceHi,
+       opt_ProduceS,
+       opt_PruneInstDecls,
+       opt_PruneTyDecls,
        opt_ReportCompile,
-       opt_SccGroup,
-       opt_SccProfilingOn,
        opt_SourceUnchanged,
        opt_Static,
-       opt_StgDoLetNoEscapes,
-       opt_Parallel,
-
-       opt_InterfaceUnfoldThreshold,
-       opt_UnfoldCasms,
-       opt_UnfoldingCreationThreshold,
-       opt_UnfoldingConDiscount,
-       opt_UnfoldingUseThreshold,
-       opt_UnfoldingKeenessFactor,
-
+       opt_Unregisterised,
        opt_Verbose,
 
-       opt_WarnNameShadowing,
-       opt_WarnUnusedMatches,
-       opt_WarnUnusedBinds,
-       opt_WarnUnusedImports,
-       opt_WarnIncompletePatterns,
-       opt_WarnOverlappingPatterns,
-       opt_WarnSimplePatterns,
-       opt_WarnTypeDefaults,
-       opt_WarnMissingMethods,
-       opt_WarnDuplicateExports,
-       opt_WarnHiShadows,
-       opt_WarnMissingSigs,
-       opt_PruneTyDecls, opt_PruneInstDecls,
-       opt_D_show_rn_stats
+       opt_UseVanillaRegs,
+       opt_UseFloatRegs,
+       opt_UseDoubleRegs,
+       opt_UseLongRegs
     ) where
 
 #include "HsVersions.h"
@@ -171,9 +193,12 @@ data CoreToDo              -- These are diff core-to-core passes,
   | CoreDoPrintCore
   | CoreDoStaticArgs
   | CoreDoStrictness
+  | CoreDoWorkerWrapper
   | CoreDoSpecialising
   | CoreDoFoldrBuildWorkerWrapper
   | CoreDoFoldrBuildWWAnal
+  | CoreDoUSPInf
+  | CoreDoCPResult 
 \end{code}
 
 \begin{code}
@@ -274,27 +299,15 @@ unpacked_opts =
 \end{code}
 
 \begin{code}
-opt_AllStrict                  = lookUp  SLIT("-fall-strict")
-opt_AllowOverlappingInstances   = lookUp  SLIT("-fallow-overlapping-instances")
-opt_AllowUndecidableInstances  = lookUp  SLIT("-fallow-undecidable-instances")
-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")
-  {-
-   It's a bit unfortunate to have to re-introduce this chap, but on Win32
-   platforms we do need a way of distinguishing between the case when we're
-   compiling a static version of the Prelude and one that's going to be
-   put into a DLL. Why? Because the compiler's wired in modules need to
-   be attributed as either coming from a DLL or not.
-  -}
-opt_CompilingPrelude           = lookUp  SLIT("-fcompiling-prelude")
+-- debugging opts
 opt_D_dump_absC                        = lookUp  SLIT("-ddump-absC")
 opt_D_dump_asm                 = lookUp  SLIT("-ddump-asm")
+opt_D_dump_cpranal             = lookUp  SLIT("-ddump-cpranalyse")
 opt_D_dump_deriv               = lookUp  SLIT("-ddump-deriv")
 opt_D_dump_ds                  = lookUp  SLIT("-ddump-ds")
 opt_D_dump_flatC               = lookUp  SLIT("-ddump-flatC")
-opt_D_dump_inlinings           = lookUp  SLIT("-ddump-inlinings")
 opt_D_dump_foreign             = lookUp  SLIT("-ddump-foreign-stubs")
+opt_D_dump_inlinings           = lookUp  SLIT("-ddump-inlinings")
 opt_D_dump_occur_anal          = lookUp  SLIT("-ddump-occur-anal")
 opt_D_dump_rdr                 = lookUp  SLIT("-ddump-rdr")
 opt_D_dump_realC               = lookUp  SLIT("-ddump-realC")
@@ -305,76 +318,113 @@ opt_D_dump_spec                  = lookUp  SLIT("-ddump-spec")
 opt_D_dump_stg                 = lookUp  SLIT("-ddump-stg")
 opt_D_dump_stranal             = lookUp  SLIT("-ddump-stranal")
 opt_D_dump_tc                  = lookUp  SLIT("-ddump-tc")
+opt_D_dump_usagesp              = lookUp  SLIT("-ddump-usagesp")
+opt_D_dump_worker_wrapper      = lookUp  SLIT("-ddump-workwrap")
 opt_D_show_passes              = lookUp  SLIT("-dshow-passes")
-opt_D_show_rn_trace            = lookUp  SLIT("-dshow-rn-trace")
 opt_D_show_rn_imports          = lookUp  SLIT("-dshow-rn-imports")
+opt_D_show_rn_trace            = lookUp  SLIT("-dshow-rn-trace")
+opt_D_show_rn_stats            = lookUp SLIT("-dshow-rn-stats")
 opt_D_simplifier_stats         = lookUp  SLIT("-dsimplifier-stats")
 opt_D_source_stats             = lookUp  SLIT("-dsource-stats")
 opt_D_verbose_core2core                = lookUp  SLIT("-dverbose-simpl")
 opt_D_verbose_stg2stg          = lookUp  SLIT("-dverbose-stg")
-opt_DictsStrict                        = lookUp  SLIT("-fdicts-strict")
 opt_DoCoreLinting              = lookUp  SLIT("-dcore-lint")
 opt_DoStgLinting               = lookUp  SLIT("-dstg-lint")
+opt_DoUSPLinting               = lookUp  SLIT("-dusagesp-lint")
+opt_PprStyle_NoPrags           = lookUp  SLIT("-dppr-noprags")
+opt_PprStyle_Debug             = lookUp  SLIT("-dppr-debug")
+opt_PprUserLength              = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
+
+-- warning opts
+opt_WarnDuplicateExports       = lookUp  SLIT("-fwarn-duplicate-exports")
+opt_WarnHiShadows              = lookUp  SLIT("-fwarn-hi-shadowing")
+opt_WarnIncompletePatterns     = lookUp  SLIT("-fwarn-incomplete-patterns")
+opt_WarnMissingMethods         = lookUp  SLIT("-fwarn-missing-methods")
+opt_WarnMissingSigs            = lookUp  SLIT("-fwarn-missing-signatures")
+opt_WarnNameShadowing          = lookUp  SLIT("-fwarn-name-shadowing")
+opt_WarnOverlappingPatterns    = lookUp  SLIT("-fwarn-overlapping-patterns")
+opt_WarnSimplePatterns         = lookUp  SLIT("-fwarn-simple-patterns")
+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")
+
+-- 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")
+
+-- language opts
+opt_AllStrict                  = lookUp  SLIT("-fall-strict")
+opt_DictsStrict                        = lookUp  SLIT("-fdicts-strict")
+opt_AllowOverlappingInstances   = lookUp  SLIT("-fallow-overlapping-instances")
+opt_AllowUndecidableInstances  = lookUp  SLIT("-fallow-undecidable-instances")
+opt_GlasgowExts                        = lookUp  SLIT("-fglasgow-exts")
+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")
+
+-- optimisation opts
 opt_DoEtaReduction             = lookUp  SLIT("-fdo-eta-reduction")
 opt_DoSemiTagging              = lookUp  SLIT("-fsemi-tagging")
-opt_DoTickyProfiling           = lookUp  SLIT("-fticky-ticky")
+opt_FoldrBuildOn               = lookUp  SLIT("-ffoldr-build-on")
+opt_InterfaceUnfoldThreshold   = lookup_def_int "-funfolding-interface-threshold" iNTERFACE_UNFOLD_THRESHOLD
+opt_LiberateCaseThreshold      = lookup_def_int "-fliberate-case-threshold"       lIBERATE_CASE_THRESHOLD
+opt_NoPreInlining              = lookUp  SLIT("-fno-pre-inlining")
+opt_StgDoLetNoEscapes          = lookUp  SLIT("-flet-no-escape")
+opt_UnfoldCasms                        = lookUp SLIT("-funfold-casms-in-hi-file")
+opt_UnfoldingConDiscount       = lookup_def_int "-funfolding-con-discount"        uNFOLDING_CON_DISCOUNT_WEIGHT
+opt_UnfoldingCreationThreshold = lookup_def_int "-funfolding-creation-threshold"  uNFOLDING_CREATION_THRESHOLD
+opt_UnfoldingKeenessFactor     = lookup_def_float "-funfolding-keeness-factor"    uNFOLDING_KEENESS_FACTOR
+opt_UnfoldingUseThreshold      = lookup_def_int "-funfolding-use-threshold"       uNFOLDING_USE_THRESHOLD
+opt_UsageSPOn                  = lookUp  SLIT("-fusagesp-on")
+opt_UnboxStrictFields          = lookUp  SLIT("-funbox-strict-fields")
+
+  {-
+   It's a bit unfortunate to have to re-introduce this chap, but on Win32
+   platforms we do need a way of distinguishing between the case when we're
+   compiling a static version of the Prelude and one that's going to be
+   put into a DLL. Why? Because the compiler's wired in modules need to
+   be attributed as either coming from a DLL or not.
+  -}
+opt_CompilingPrelude           = lookUp  SLIT("-fcompiling-prelude")
 opt_EmitCExternDecls           = lookUp  SLIT("-femit-extern-decls")
 opt_EnsureSplittableC          = lookUp  SLIT("-fglobalise-toplev-names")
-opt_FoldrBuildOn               = lookUp  SLIT("-ffoldr-build-on")
 opt_GranMacros                 = lookUp  SLIT("-fgransim")
-opt_GlasgowExts                        = lookUp  SLIT("-fglasgow-exts")
 opt_HiMap                      = lookup_str "-himap="       -- file saying where to look for .hi files
 opt_HiVersion                  = lookup_def_int "-fhi-version=" 0 -- what version we're compiling.
+opt_IgnoreAsserts               = lookUp  SLIT("-fignore-asserts")
 opt_IgnoreIfacePragmas         = lookUp  SLIT("-fignore-interface-pragmas")
-opt_IrrefutableTuples          = lookUp  SLIT("-firrefutable-tuples")
-opt_MaxContextReductionDepth   = lookup_def_int "-fcontext-stack" mAX_CONTEXT_REDUCTION_DEPTH
-opt_MultiParamClasses          = opt_GlasgowExts
 opt_NoHiCheck                   = lookUp  SLIT("-fno-hi-version-check")
 opt_NoImplicitPrelude          = lookUp  SLIT("-fno-implicit-prelude")
-opt_NoPreInlining              = lookUp  SLIT("-fno-pre-inlining")
-opt_NumbersStrict              = lookUp  SLIT("-fnumbers-strict")
 opt_OmitBlackHoling            = lookUp  SLIT("-dno-black-holing")
 opt_OmitInterfacePragmas       = lookUp  SLIT("-fomit-interface-pragmas")
-opt_PprStyle_NoPrags           = lookUp  SLIT("-dppr-noprags")
-opt_PprStyle_Debug             = lookUp  SLIT("-dppr-debug")
-opt_PprUserLength              = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
 opt_ProduceC                   = lookup_str "-C="
-opt_ProduceS                   = lookup_str "-S="
 opt_ProduceExportCStubs                = lookup_str "-F="
 opt_ProduceExportHStubs                = lookup_str "-FH="
 opt_ProduceHi                  = lookup_str "-hifile=" -- the one to produce this time 
+opt_ProduceS                   = lookup_str "-S="
 opt_ReportCompile                = lookUp SLIT("-freport-compile")
-opt_SccProfilingOn             = lookUp  SLIT("-fscc-profiling")
+opt_PruneTyDecls               = not (lookUp SLIT("-fno-prune-tydecls"))
+opt_PruneInstDecls             = not (lookUp SLIT("-fno-prune-instdecls"))
 opt_SourceUnchanged            = lookUp  SLIT("-fsource-unchanged")
-opt_StgDoLetNoEscapes          = lookUp  SLIT("-flet-no-escape")
-opt_Parallel                   = lookUp  SLIT("-fparallel")
 opt_Static                     = lookUp  SLIT("-static")
-opt_SccGroup                   = lookup_str "-G="
+opt_Unregisterised             = lookUp  SLIT("-funregisterised")
 opt_Verbose                    = lookUp  SLIT("-v")
 
-opt_UnfoldCasms                        = lookUp SLIT("-funfold-casms-in-hi-file")
-opt_InterfaceUnfoldThreshold   = lookup_def_int "-funfolding-interface-threshold" iNTERFACE_UNFOLD_THRESHOLD
-opt_UnfoldingCreationThreshold = lookup_def_int "-funfolding-creation-threshold"  uNFOLDING_CREATION_THRESHOLD
-opt_UnfoldingUseThreshold      = lookup_def_int "-funfolding-use-threshold"       uNFOLDING_USE_THRESHOLD
-opt_UnfoldingConDiscount       = lookup_def_int "-funfolding-con-discount"        uNFOLDING_CON_DISCOUNT_WEIGHT
-                       
-opt_LiberateCaseThreshold      = lookup_def_int "-fliberate-case-threshold"       lIBERATE_CASE_THRESHOLD
-opt_UnfoldingKeenessFactor     = lookup_def_float "-funfolding-keeness-factor"    uNFOLDING_KEENESS_FACTOR
-opt_WarnNameShadowing          = lookUp  SLIT("-fwarn-name-shadowing")
-opt_WarnHiShadows              = lookUp  SLIT("-fwarn-hi-shadowing")
-opt_WarnIncompletePatterns     = lookUp  SLIT("-fwarn-incomplete-patterns")
-opt_WarnOverlappingPatterns    = lookUp  SLIT("-fwarn-overlapping-patterns")
-opt_WarnSimplePatterns         = lookUp  SLIT("-fwarn-simple-patterns")
-opt_WarnTypeDefaults           = lookUp  SLIT("-fwarn-type-defaults")
-opt_WarnUnusedMatches          = lookUp  SLIT("-fwarn-unused-matches")
-opt_WarnUnusedBinds            = lookUp  SLIT("-fwarn-unused-binds")
-opt_WarnUnusedImports          = lookUp  SLIT("-fwarn-unused-imports")
-opt_WarnMissingMethods         = lookUp  SLIT("-fwarn-missing-methods")
-opt_WarnDuplicateExports       = lookUp  SLIT("-fwarn-duplicate-exports")
-opt_WarnMissingSigs            = lookUp  SLIT("-fwarn-missing-signatures")
-opt_PruneTyDecls               = not (lookUp SLIT("-fno-prune-tydecls"))
-opt_PruneInstDecls             = not (lookUp SLIT("-fno-prune-instdecls"))
-opt_D_show_rn_stats            = lookUp SLIT("-dshow-rn-stats")
+opt_UseVanillaRegs | opt_Unregisterised = 0
+                  | otherwise          = mAX_Real_Vanilla_REG
+opt_UseFloatRegs   | opt_Unregisterised = 0
+                  | otherwise          = mAX_Real_Float_REG
+opt_UseDoubleRegs  | opt_Unregisterised = 0
+                  | otherwise          = mAX_Real_Double_REG
+opt_UseLongRegs    | opt_Unregisterised = 0
+                  | otherwise          = mAX_Real_Long_REG
 
 -- opt_UnfoldingOverrideThreshold      = lookup_int "-funfolding-override-threshold"
 \end{code}
@@ -410,9 +460,12 @@ classifyOpts = sep argv [] [] -- accumulators...
          "-fprint-core"     -> CORE_TD(CoreDoPrintCore)
          "-fstatic-args"    -> CORE_TD(CoreDoStaticArgs)
          "-fstrictness"     -> CORE_TD(CoreDoStrictness)
+         "-fworker-wrapper" -> CORE_TD(CoreDoWorkerWrapper)
          "-fspecialise"     -> CORE_TD(CoreDoSpecialising)
          "-ffoldr-build-worker-wrapper"  -> CORE_TD(CoreDoFoldrBuildWorkerWrapper)
          "-ffoldr-build-ww-anal"  -> CORE_TD(CoreDoFoldrBuildWWAnal)
+         "-fusagesp"        -> CORE_TD(CoreDoUSPInf)
+         "-fcpr-analyse"    -> CORE_TD(CoreDoCPResult)
 
          "-fstg-static-args" -> STG_TD(StgDoStaticArgs)
          "-fupdate-analysis" -> STG_TD(StgDoUpdateAnalysis)
@@ -560,8 +613,10 @@ isAmongSimpl on_switches           -- Switches mentioned later occur *earlier*
        case (indexArray# stuff (tagOf_SimplSwitch switch)) of
 #if __GLASGOW_HASKELL__ < 400
          Lift v -> v
-#else
+#elif __GLASGOW_HASKELL__ < 403
          (# _, v #) -> v
+#else
+         (# v #) -> v
 #endif
     }
   where