X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FDynFlags.hs;h=3645e080cffc571a053677d05778eef0a67ef622;hb=e5adcaf845207c73da65cb44cff4ef83b76dd4a9;hp=dbb791ef63d693120d34c022c8bfc58c2122b9eb;hpb=a33ae68ab331a16fbb6e7d6931d1c38bd8f37a85;p=ghc-hetmet.git diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index dbb791e..3645e08 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -305,6 +305,7 @@ data DynFlags = DynFlags { ruleCheck :: Maybe String, specConstrThreshold :: Maybe Int, -- Threshold for SpecConstr + specConstrCount :: Maybe Int, -- Max number of specialisations for any one function liberateCaseThreshold :: Maybe Int, -- Threshold for LiberateCase stolen_x86_regs :: Int, @@ -496,6 +497,7 @@ defaultDynFlags = shouldDumpSimplPhase = const False, ruleCheck = Nothing, specConstrThreshold = Just 200, + specConstrCount = Just 3, liberateCaseThreshold = Just 200, stolen_x86_regs = 4, cmdlineHcIncludes = [], @@ -1185,6 +1187,10 @@ dynamic_flags = [ upd (\dfs -> dfs{ specConstrThreshold = Just n }))) , ( "fno-spec-constr-threshold", NoArg ( upd (\dfs -> dfs{ specConstrThreshold = Nothing }))) + , ( "fspec-constr-count", IntSuffix (\n -> + upd (\dfs -> dfs{ specConstrCount = Just n }))) + , ( "fno-spec-constr-count", NoArg ( + upd (\dfs -> dfs{ specConstrCount = Nothing }))) , ( "fliberate-case-threshold", IntSuffix (\n -> upd (\dfs -> dfs{ liberateCaseThreshold = Just n }))) , ( "fno-liberate-case-threshold", NoArg ( @@ -1478,26 +1484,31 @@ setDumpSimplPhases :: String -> DynP () setDumpSimplPhases s = do setDynFlag Opt_ForceRecomp upd (\s -> s { shouldDumpSimplPhase = spec }) where + spec :: SimplifierMode -> Bool spec = join (||) - . map (join (&&)) - . map (map match) - . map (split ':') + . map (join (&&) . map match . split ':') . split ',' $ case s of '=' : s' -> s' _ -> s + join :: (Bool -> Bool -> Bool) + -> [SimplifierMode -> Bool] + -> SimplifierMode -> Bool join _ [] = const True join op ss = foldr1 (\f g x -> f x `op` g x) ss + match :: String -> SimplifierMode -> Bool match "" = const True match s = case reads s of [(n,"")] -> phase_num n _ -> phase_name s + phase_num :: Int -> SimplifierMode -> Bool phase_num n (SimplPhase k _) = n == k phase_num _ _ = False + phase_name :: String -> SimplifierMode -> Bool phase_name s SimplGently = s == "gentle" phase_name s (SimplPhase _ ss) = s `elem` ss @@ -1652,32 +1663,9 @@ splitPathList s = filter notNull (splitUp s) -- tmpDir, where we store temporary files. setTmpDir :: FilePath -> DynFlags -> DynFlags -setTmpDir dir dflags = dflags{ tmpDir = canonicalise dir } - where -#if !defined(mingw32_HOST_OS) - canonicalise p = normalise p -#else - -- Canonicalisation of temp path under win32 is a bit more - -- involved: (a) strip trailing slash, - -- (b) normalise slashes - -- (c) just in case, if there is a prefix /cygdrive/x/, change to x: - canonicalise path = removeTrailingSlash $ normalise $ xltCygdrive path - - -- if we're operating under cygwin, and TMP/TEMP is of - -- the form "/cygdrive/drive/path", translate this to - -- "drive:/path" (as GHC isn't a cygwin app and doesn't - -- understand /cygdrive paths.) - cygdrivePrefix = [pathSeparator] ++ "/cygdrive/" ++ [pathSeparator] - xltCygdrive path = case maybePrefixMatch cygdrivePrefix path of - Just (drive:sep:xs) - | isPathSeparator sep -> drive:':':pathSeparator:xs - _ -> path - - -- strip the trailing backslash (awful, but we only do this once). - removeTrailingSlash path - | isPathSeparator (last path) = init path - | otherwise = path -#endif +setTmpDir dir dflags = dflags{ tmpDir = normalise dir } + -- we used to fix /cygdrive/c/.. on Windows, but this doesn't + -- seem necessary now --SDM 7/2/2008 ----------------------------------------------------------------------------- -- Hpc stuff