[project @ 2000-07-23 10:53:11 by panne]
[ghc-hetmet.git] / ghc / compiler / main / CmdLineOpts.lhs
index 5594ece..49f35e0 100644 (file)
@@ -38,12 +38,14 @@ module CmdLineOpts (
        opt_D_dump_stg,
        opt_D_dump_stranal,
        opt_D_dump_tc,
+       opt_D_dump_types,
         opt_D_dump_usagesp,
        opt_D_dump_worker_wrapper,
        opt_D_show_passes,
        opt_D_dump_rn_trace,
        opt_D_dump_rn_stats,
         opt_D_dump_stix,
+       opt_D_dump_minimal_imports,
        opt_D_source_stats,
        opt_D_verbose_core2core,
        opt_D_verbose_stg2stg,
@@ -105,6 +107,7 @@ module CmdLineOpts (
        opt_SimplCaseOfCase,
        opt_SimplCaseMerge,
        opt_SimplPedanticBottoms,
+       opt_SimplExcessPrecision,
 
        -- Unfolding control
        opt_UF_HiFileThreshold,
@@ -118,7 +121,7 @@ module CmdLineOpts (
        opt_UF_DearOp,
 
        -- misc opts
-       opt_CompilingPrelude,
+       opt_InPackage,
        opt_EmitCExternDecls,
        opt_EnsureSplittableC,
        opt_GranMacros,
@@ -132,11 +135,12 @@ module CmdLineOpts (
        opt_NoImplicitPrelude,
        opt_OmitBlackHoling,
        opt_OmitInterfacePragmas,
-       opt_ProduceC,
        opt_ProduceExportCStubs,
        opt_ProduceExportHStubs,
-       opt_ProduceHi,
-       opt_ProduceS,
+       opt_HiFile,
+       opt_HiDir,
+       opt_HiSuf,
+       opt_NoPruneTyDecls,
        opt_NoPruneDecls,
        opt_ReportCompile,
        opt_SourceUnchanged,
@@ -144,6 +148,9 @@ module CmdLineOpts (
        opt_Unregisterised,
        opt_Verbose,
 
+       opt_OutputLanguage,
+       opt_OutputFile,
+
        -- Code generation
        opt_UseVanillaRegs,
        opt_UseFloatRegs,
@@ -221,7 +228,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"
@@ -323,6 +329,7 @@ opt_D_dump_spec                     = opt_D_dump_most || lookUp  SLIT("-ddump-spec")
 opt_D_dump_stg                 = opt_D_dump_most || lookUp  SLIT("-ddump-stg")
 opt_D_dump_stranal             = opt_D_dump_most || lookUp  SLIT("-ddump-stranal")
 opt_D_dump_tc                  = opt_D_dump_most || lookUp  SLIT("-ddump-tc")
+opt_D_dump_types               = opt_D_dump_most || lookUp  SLIT("-ddump-types")
 opt_D_dump_rules               = opt_D_dump_most || lookUp  SLIT("-ddump-rules")
 opt_D_dump_usagesp              = opt_D_dump_most || lookUp  SLIT("-ddump-usagesp")
 opt_D_dump_cse                         = opt_D_dump_most || lookUp  SLIT("-ddump-cse")
@@ -335,6 +342,7 @@ 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")
 opt_D_verbose_stg2stg          = opt_D_dump_all  || lookUp  SLIT("-dverbose-stg")
+opt_D_dump_minimal_imports     = lookUp  SLIT("-ddump-minimal-imports")
 
 opt_DoCoreLinting              = lookUp  SLIT("-dcore-lint")
 opt_DoStgLinting               = lookUp  SLIT("-dstg-lint")
@@ -389,14 +397,15 @@ opt_UnfoldCasms                   = lookUp SLIT("-funfold-casms-in-hi-file")
 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")
+{-
+   The optional '-inpackage=P' flag tells what package 
+   we are compiling this module for.
+   The Prelude, for example is compiled with '-package prelude'
+-}
+opt_InPackage                  = case lookup_str "-inpackage=" of
+                                   Just p  -> _PK_ p
+                                   Nothing -> SLIT("Main")     -- The package name if none is specified
+
 opt_EmitCExternDecls           = lookUp  SLIT("-femit-extern-decls")
 opt_EnsureSplittableC          = lookUp  SLIT("-fglobalise-toplev-names")
 opt_GranMacros                 = lookUp  SLIT("-fgransim")
@@ -410,10 +419,23 @@ opt_NoHiCheck                   = lookUp  SLIT("-fno-hi-version-check")
 opt_NoImplicitPrelude          = lookUp  SLIT("-fno-implicit-prelude")
 opt_OmitBlackHoling            = lookUp  SLIT("-dno-black-holing")
 opt_OmitInterfacePragmas       = lookUp  SLIT("-fomit-interface-pragmas")
-opt_ProduceC                   = lookup_str "-C="
 opt_ProduceExportCStubs                = lookup_str "-F="
 opt_ProduceExportHStubs                = lookup_str "-FH="
-opt_ProduceHi                  = lookup_str "-hifile=" -- the one to produce this time 
+
+-- where to generate the .hi file
+opt_HiFile                     = lookup_str "-hifile="
+opt_HiDir                      = lookup_str "-hidir="
+opt_HiSuf                      = lookup_str "-hisuf="
+
+-- Language for output: "C", "asm", "java", maybe more
+-- Nothing => don't output anything
+opt_OutputLanguage :: Maybe String
+opt_OutputLanguage = lookup_str "-olang="
+
+opt_OutputFile :: String
+opt_OutputFile            = case lookup_str "-ofile=" of
+                       Nothing -> panic "No output file specified (-ofile=xxx)"
+                       Just f  -> f
 
 -- Simplifier switches
 opt_SimplNoPreInlining         = lookUp SLIT("-fno-pre-inlining")
@@ -424,6 +446,7 @@ opt_SimplDoLambdaEtaExpansion       = lookUp SLIT("-fdo-lambda-eta-expansion")
 opt_SimplCaseOfCase            = lookUp SLIT("-fcase-of-case")
 opt_SimplCaseMerge             = lookUp SLIT("-fcase-merge")
 opt_SimplPedanticBottoms       = lookUp SLIT("-fpedantic-bottoms")
+opt_SimplExcessPrecision       = lookUp SLIT("-fexcess-precision")
 
 -- Unfolding control
 opt_UF_HiFileThreshold         = lookup_def_int "-funfolding-interface-threshold" (45::Int)
@@ -432,14 +455,14 @@ opt_UF_UseThreshold               = lookup_def_int "-funfolding-use-threshold"       (8::Int)     --
 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"    (1.0::Float)
+opt_UF_KeenessFactor           = lookup_def_float "-funfolding-keeness-factor"    (1.5::Float)
 
 opt_UF_CheapOp  = ( 1 :: Int)  -- Only one instruction; and the args are charged for
 opt_UF_DearOp   = ( 4 :: Int)
                        
-opt_ProduceS                   = lookup_str "-S="
 opt_ReportCompile               = lookUp SLIT("-freport-compile")
 opt_NoPruneDecls               = lookUp SLIT("-fno-prune-decls")
+opt_NoPruneTyDecls             = lookUp SLIT("-fno-prune-tydecls")
 opt_SourceUnchanged            = lookUp SLIT("-fsource-unchanged")
 opt_Static                     = lookUp SLIT("-static")
 opt_Unregisterised             = lookUp SLIT("-funregisterised")
@@ -492,7 +515,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)