Add graph coloring register allocator.
[ghc-hetmet.git] / compiler / main / DynFlags.hs
index 3de4012..be14a5b 100644 (file)
@@ -47,7 +47,9 @@ module DynFlags (
         allFlags,
 
        -- misc stuff
-       machdepCCOpts, picCCOpts
+       machdepCCOpts, picCCOpts,
+    supportedLanguages,
+    compilerInfo,
   ) where
 
 #include "HsVersions.h"
@@ -94,6 +96,12 @@ data DynFlag
    = Opt_D_dump_cmm
    | Opt_D_dump_cps_cmm
    | Opt_D_dump_asm
+   | Opt_D_dump_asm_native
+   | Opt_D_dump_asm_liveness
+   | Opt_D_dump_asm_coalesce
+   | Opt_D_dump_asm_regalloc
+   | Opt_D_dump_asm_regalloc_stages
+   | Opt_D_dump_asm_conflicts
    | Opt_D_dump_cpranal
    | Opt_D_dump_deriv
    | Opt_D_dump_ds
@@ -160,9 +168,9 @@ data DynFlag
    | Opt_WarnTabs
 
    -- language opts
-   | Opt_AllowOverlappingInstances
-   | Opt_AllowUndecidableInstances
-   | Opt_AllowIncoherentInstances
+   | Opt_OverlappingInstances
+   | Opt_UndecidableInstances
+   | Opt_IncoherentInstances
    | Opt_MonomorphismRestriction
    | Opt_MonoPatBinds
    | Opt_ExtendedDefaultRules          -- Use GHC's extended rules for defaulting
@@ -170,7 +178,7 @@ data DynFlag
    | Opt_UnliftedFFITypes
    | Opt_PArr                          -- Syntactic support for parallel arrays
    | Opt_Arrows                                -- Arrow-notation syntax
-   | Opt_TH
+   | Opt_TemplateHaskell
    | Opt_ImplicitParams
    | Opt_Generics
    | Opt_ImplicitPrelude 
@@ -183,7 +191,7 @@ data DynFlag
    | Opt_RecordWildCards
    | Opt_RecordPuns
    | Opt_GADTs
-   | Opt_RelaxedPolyRec                        -- -X=RelaxedPolyRec
+   | Opt_RelaxedPolyRec
    | Opt_StandaloneDeriving
    | Opt_DeriveDataTypeable
    | Opt_TypeSynonymInstances
@@ -227,6 +235,7 @@ data DynFlag
    | Opt_DictsCheap
    | Opt_RewriteRules
    | Opt_Vectorise
+   | Opt_RegsGraph
 
    -- misc opts
    | Opt_Cpp
@@ -988,6 +997,13 @@ dynamic_flags = [
   ,  ( "ddump-cmm",             setDumpFlag Opt_D_dump_cmm)
   ,  ( "ddump-cps-cmm",                 setDumpFlag Opt_D_dump_cps_cmm)
   ,  ( "ddump-asm",             setDumpFlag Opt_D_dump_asm)
+  ,  ( "ddump-asm-native",       setDumpFlag Opt_D_dump_asm_native)
+  ,  ( "ddump-asm-liveness",     setDumpFlag Opt_D_dump_asm_liveness)
+  ,  ( "ddump-asm-coalesce",     setDumpFlag Opt_D_dump_asm_coalesce)
+  ,  ( "ddump-asm-regalloc",     setDumpFlag Opt_D_dump_asm_regalloc)
+  ,  ( "ddump-asm-conflicts",    setDumpFlag Opt_D_dump_asm_conflicts)
+  ,  ( "ddump-asm-regalloc-stages",
+                                 setDumpFlag Opt_D_dump_asm_regalloc_stages)
   ,  ( "ddump-cpranal",         setDumpFlag Opt_D_dump_cpranal)
   ,  ( "ddump-deriv",           setDumpFlag Opt_D_dump_deriv)
   ,  ( "ddump-ds",              setDumpFlag Opt_D_dump_ds)
@@ -1049,7 +1065,7 @@ dynamic_flags = [
 
        ------ Optimisation flags ------------------------------------------
   ,  ( "O"     , NoArg (upd (setOptLevel 1)))
-  ,  ( "Onot"  , NoArg (upd (setOptLevel 0)))
+  ,  ( "Onot"  , NoArg (upd (setOptLevel 0))) -- deprecated
   ,  ( "O"     , OptIntSuffix (\mb_n -> upd (setOptLevel (mb_n `orElse` 1))))
                -- If the number is missing, use 1
 
@@ -1135,8 +1151,9 @@ fFlags = [
   ( "rewrite-rules",                    Opt_RewriteRules ),
   ( "break-on-exception",               Opt_BreakOnException ),
   ( "vectorise",                        Opt_Vectorise ),
+  ( "regs-graph",                       Opt_RegsGraph),
   -- Deprecated in favour of -XTemplateHaskell:
-  ( "th",                               Opt_TH ),
+  ( "th",                               Opt_TemplateHaskell ),
   -- Deprecated in favour of -XForeignFunctionInterface:
   ( "fi",                               Opt_ForeignFunctionInterface ),
   -- Deprecated in favour of -XForeignFunctionInterface:
@@ -1159,14 +1176,18 @@ fFlags = [
   ( "implicit-params",                  Opt_ImplicitParams ),
   -- Deprecated in favour of -XScopedTypeVariables:
   ( "scoped-type-variables",            Opt_ScopedTypeVariables ),
+  -- Deprecated in favour of -XPArr:
+  ( "parr",                             Opt_PArr ),
   -- Deprecated in favour of -XOverlappingInstances:
-  ( "AllowOverlappingInstances",        Opt_AllowOverlappingInstances ),
+  ( "allow-overlapping-instances",      Opt_OverlappingInstances ),
   -- Deprecated in favour of -XUndecidableInstances:
-  ( "AllowUndecidableInstances",        Opt_AllowUndecidableInstances ),
+  ( "allow-undecidable-instances",      Opt_UndecidableInstances ),
   -- Deprecated in favour of -XIncoherentInstances:
-  ( "AllowIncoherentInstances",         Opt_AllowIncoherentInstances )
+  ( "allow-incoherent-instances",       Opt_IncoherentInstances )
   ]
 
+supportedLanguages :: [String]
+supportedLanguages = map fst xFlags
 
 -- These -X<blah> flags can all be reversed with -XNo<blah>
 xFlags :: [(String, DynFlag)]
@@ -1190,8 +1211,8 @@ xFlags = [
   ( "TypeOperators",                    Opt_TypeOperators ),
   ( "RecursiveDo",                      Opt_RecursiveDo ),
   ( "Arrows",                           Opt_Arrows ),
-  ( "Parr",                             Opt_PArr ),
-  ( "TemplateHaskell",                  Opt_TH ),
+  ( "PArr",                             Opt_PArr ),
+  ( "TemplateHaskell",                  Opt_TemplateHaskell ),
   ( "Generics",                         Opt_Generics ),
   -- On by default:
   ( "ImplicitPrelude",                  Opt_ImplicitPrelude ),
@@ -1220,9 +1241,9 @@ xFlags = [
   ( "MultiParamTypeClasses",            Opt_MultiParamTypeClasses ),
   ( "FunctionalDependencies",           Opt_FunctionalDependencies ),
   ( "GeneralizedNewtypeDeriving",       Opt_GeneralizedNewtypeDeriving ),
-  ( "OverlappingInstances",             Opt_AllowOverlappingInstances ),
-  ( "UndecidableInstances",             Opt_AllowUndecidableInstances ),
-  ( "IncoherentInstances",              Opt_AllowIncoherentInstances )
+  ( "OverlappingInstances",             Opt_OverlappingInstances ),
+  ( "UndecidableInstances",             Opt_UndecidableInstances ),
+  ( "IncoherentInstances",              Opt_IncoherentInstances )
   ]
 
 impliedFlags :: [(DynFlag, [DynFlag])]
@@ -1629,18 +1650,21 @@ picCCOpts dflags
 -- Splitting
 
 can_split :: Bool
-can_split =  
-#if    defined(i386_TARGET_ARCH)     \
-    || defined(x86_64_TARGET_ARCH)   \
-    || defined(alpha_TARGET_ARCH)    \
-    || defined(hppa_TARGET_ARCH)     \
-    || defined(m68k_TARGET_ARCH)     \
-    || defined(mips_TARGET_ARCH)     \
-    || defined(powerpc_TARGET_ARCH)  \
-    || defined(rs6000_TARGET_ARCH)   \
-    || defined(sparc_TARGET_ARCH) 
-   True
-#else
-   False
-#endif
+can_split = cSplitObjs == "YES"
+
+-- -----------------------------------------------------------------------------
+-- Compiler Info
+
+compilerInfo :: [(String, String)]
+compilerInfo = [("Project name",                cProjectName),
+                ("Project version",             cProjectVersion),
+                ("Booter version",              cBooterVersion),
+                ("Stage",                       cStage),
+                ("Interface file version",      cHscIfaceFileVersion),
+                ("Object splitting",            cSplitObjs),
+                ("Have native code generator",  cGhcWithNativeCodeGen),
+                ("Unregisterised",              cGhcUnregisterised),
+                ("Tables next to code",         cGhcEnableTablesNextToCode),
+                ("Win32 DLLs",                  cEnableWin32DLLs),
+                ("Leading underscore",          cLeadingUnderscore)]