X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FDynFlags.hs;h=f40ac43be3c75e7361857d40341afb0d3886732d;hb=53ec704b7155b18a49f09e6894fd033db3b8f592;hp=931d3847d9da129e223333381df4fd035e3db29c;hpb=c3693c2d32ffb9d312a598a65cbc62f3c3270008;p=ghc-hetmet.git diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 931d384..f40ac43 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -23,6 +23,7 @@ module DynFlags ( Option(..), DynLibLoader(..), fFlags, xFlags, + DPHBackend(..), -- Configuration of the core-to-core and stg-to-stg phases CoreToDo(..), @@ -274,6 +275,7 @@ data DynFlag | Opt_EmbedManifest | Opt_RunCPSZ | Opt_ConvertToZipCfgAndBack + | Opt_AutoLinkPackages -- keeping stuff | Opt_KeepHiDiffs @@ -310,6 +312,8 @@ data DynFlags = DynFlags { mainFunIs :: Maybe String, ctxtStkDepth :: Int, -- Typechecker context stack depth + dphBackend :: DPHBackend, + thisPackage :: PackageId, -- ways @@ -501,6 +505,8 @@ defaultDynFlags = mainFunIs = Nothing, ctxtStkDepth = mAX_CONTEXT_REDUCTION_DEPTH, + dphBackend = DPHPar, + thisPackage = mainPackageId, objectDir = Nothing, @@ -563,6 +569,7 @@ defaultDynFlags = -- end of initSysTools values haddockOptions = Nothing, flags = [ + Opt_AutoLinkPackages, Opt_ReadUserPackageConf, Opt_MonoPatBinds, -- Experimentally, I'm making this non-standard @@ -807,7 +814,7 @@ data CoreToDo -- These are diff core-to-core passes, | CoreCSE | CoreDoRuleCheck Int{-CompilerPhase-} String -- Check for non-application of rules -- matching this string - | CoreDoVectorisation + | CoreDoVectorisation DPHBackend | CoreDoNothing -- Useful when building up | CoreDoPasses [CoreToDo] -- lists of these things @@ -848,7 +855,6 @@ getCoreToDo dflags spec_constr = dopt Opt_SpecConstr dflags liberate_case = dopt Opt_LiberateCase dflags rule_check = ruleCheck dflags - vectorisation = dopt Opt_Vectorise dflags static_args = dopt Opt_StaticArgumentTransformation dflags maybe_rule_check phase = runMaybe rule_check (CoreDoRuleCheck phase) @@ -861,6 +867,11 @@ getCoreToDo dflags maybe_rule_check phase ] + vectorisation + = runWhen (dopt Opt_Vectorise dflags) + $ CoreDoPasses [ simpl_gently, CoreDoVectorisation (dphBackend dflags) ] + + -- By default, we have 2 phases before phase 0. -- Want to run with inline phase 2 after the specialiser to give @@ -895,7 +906,7 @@ getCoreToDo dflags core_todo = if opt_level == 0 then - [runWhen vectorisation (CoreDoPasses [ simpl_gently, CoreDoVectorisation ]), + [vectorisation, simpl_phase 0 ["final"] max_iter] else {- opt_level >= 1 -} [ @@ -905,12 +916,12 @@ getCoreToDo dflags -- after this before anything else runWhen static_args (CoreDoPasses [ simpl_gently, CoreDoStaticArgs ]), - -- initial simplify: mk specialiser happy: minimum effort please - simpl_gently, - -- We run vectorisation here for now, but we might also try to run -- it later - runWhen vectorisation (CoreDoPasses [ CoreDoVectorisation, simpl_gently ]), + vectorisation, + + -- initial simplify: mk specialiser happy: minimum effort please + simpl_gently, -- Specialisation is best done before full laziness -- so that overloaded functions have all their dictionary lambdas manifest @@ -1096,6 +1107,7 @@ dynamic_flags = [ , Flag "keep-tmp-files" (NoArg (setDynFlag Opt_KeepTmpFiles)) Supported ------- Miscellaneous ---------------------------------------------- + , Flag "no-auto-link-packages" (NoArg (unSetDynFlag Opt_AutoLinkPackages)) Supported , Flag "no-hs-main" (NoArg (setDynFlag Opt_NoHsMain)) Supported , Flag "main-is" (SepArg setMainIs ) Supported , Flag "haddock" (NoArg (setDynFlag Opt_Haddock)) Supported @@ -1323,6 +1335,15 @@ dynamic_flags = [ (IntSuffix $ \n -> upd $ \dfs -> dfs{ ctxtStkDepth = n }) Supported + ------ DPH flags ---------------------------------------------------- + + , Flag "fdph-seq" + (NoArg (upd (setDPHBackend DPHSeq))) + Supported + , Flag "fdph-par" + (NoArg (upd (setDPHBackend DPHPar))) + Supported + ------ Compiler flags ----------------------------------------------- , Flag "fasm" (NoArg (setObjTarget HscAsm)) Supported @@ -1711,6 +1732,11 @@ setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20 `dopt_set` Opt_DictsCheap `dopt_unset` Opt_MethodSharing +data DPHBackend = DPHPar + | DPHSeq + +setDPHBackend :: DPHBackend -> DynFlags -> DynFlags +setDPHBackend backend dflags = dflags { dphBackend = backend } setMainIs :: String -> DynP ()