Add graph coloring register allocator.
[ghc-hetmet.git] / compiler / main / DynFlags.hs
index ac8c606..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
@@ -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,6 +1151,7 @@ fFlags = [
   ( "rewrite-rules",                    Opt_RewriteRules ),
   ( "break-on-exception",               Opt_BreakOnException ),
   ( "vectorise",                        Opt_Vectorise ),
+  ( "regs-graph",                       Opt_RegsGraph),
   -- Deprecated in favour of -XTemplateHaskell:
   ( "th",                               Opt_TemplateHaskell ),
   -- Deprecated in favour of -XForeignFunctionInterface:
@@ -1162,13 +1179,15 @@ fFlags = [
   -- Deprecated in favour of -XPArr:
   ( "parr",                             Opt_PArr ),
   -- Deprecated in favour of -XOverlappingInstances:
-  ( "AllowOverlappingInstances",        Opt_OverlappingInstances ),
+  ( "allow-overlapping-instances",      Opt_OverlappingInstances ),
   -- Deprecated in favour of -XUndecidableInstances:
-  ( "AllowUndecidableInstances",        Opt_UndecidableInstances ),
+  ( "allow-undecidable-instances",      Opt_UndecidableInstances ),
   -- Deprecated in favour of -XIncoherentInstances:
-  ( "AllowIncoherentInstances",         Opt_IncoherentInstances )
+  ( "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)]
@@ -1631,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)]