X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FDriverPipeline.hs;h=afbd03e2c765f083bd18296de3baaab31f07c9c2;hp=03e3cf6c565dd51d64cd715db24ffe9d8d3e622a;hb=79f275092de54ba5f7e7336c13231ad5198befdf;hpb=24c0c8c2040e7050fd5306afc85378eb94a06bd2 diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index 03e3cf6..afbd03e 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -51,12 +51,10 @@ import SrcLoc import FastString import LlvmCodeGen ( llvmFixupAsm ) import MonadUtils +import Platform --- import Data.Either import Exception import Data.IORef ( readIORef ) -import Distribution.System --- import GHC.Exts ( Int(..) ) import System.Directory import System.FilePath import System.IO @@ -1061,7 +1059,7 @@ runPhase cc_phase input_fn dflags -- than a double, which leads to unpredictable results. -- By default, we turn this off with -ffloat-store unless -- the user specified -fexcess-precision. - (if cTargetArch == I386 && + (if platformArch (targetPlatform dflags) == ArchX86 && not (dopt Opt_ExcessPrecision dflags) then [ "-ffloat-store" ] else []) ++ @@ -1093,7 +1091,7 @@ runPhase cc_phase input_fn dflags -- These symbols are imported into the stub.c file via RtsAPI.h, and the -- way we do the import depends on whether we're currently compiling -- the base package or not. - ++ (if cTargetOS == Windows && + ++ (if platformOS (targetPlatform dflags) == OSMinGW32 && thisPackage dflags == basePackageId then [ "-DCOMPILING_BASE_PACKAGE" ] else []) @@ -1104,7 +1102,7 @@ runPhase cc_phase input_fn dflags -- regardless of the ordering. -- -- This is a temporary hack. - ++ (if cTargetArch == Sparc + ++ (if platformArch (targetPlatform dflags) == ArchSPARC then ["-mcpu=v9"] else []) @@ -1182,7 +1180,7 @@ runPhase As input_fn dflags -- regardless of the ordering. -- -- This is a temporary hack. - ++ (if cTargetArch == Sparc + ++ (if platformArch (targetPlatform dflags) == ArchSPARC then [SysTools.Option "-mcpu=v9"] else []) @@ -1237,7 +1235,7 @@ runPhase SplitAs _input_fn dflags -- regardless of the ordering. -- -- This is a temporary hack. - (if cTargetArch == Sparc + (if platformArch (targetPlatform dflags) == ArchSPARC then [SysTools.Option "-mcpu=v9"] else []) ++ @@ -1307,22 +1305,18 @@ runPhase LlvmOpt input_fn dflags -- fix up some pretty big deficiencies in the code we generate llvmOpts = ["-mem2reg", "-O1", "-O2"] - ----------------------------------------------------------------------------- -- LlvmLlc phase runPhase LlvmLlc input_fn dflags = do let lc_opts = getOpts dflags opt_lc - let opt_lvl = max 0 (min 2 $ optLevel dflags) - let nphase = if cTargetOS == OSX - then LlvmMangle - else As - let rmodel | opt_PIC = "pic" + opt_lvl = max 0 (min 2 $ optLevel dflags) + rmodel | opt_PIC = "pic" | not opt_Static = "dynamic-no-pic" | otherwise = "static" - output_fn <- phaseOutputFilename nphase + output_fn <- phaseOutputFilename LlvmMangle io $ SysTools.runLlvmLlc dflags ([ SysTools.Option (llvmOpts !! opt_lvl), @@ -1331,13 +1325,13 @@ runPhase LlvmLlc input_fn dflags SysTools.Option "-o", SysTools.FileOption "" output_fn] ++ map SysTools.Option lc_opts) - return (nphase, output_fn) + return (LlvmMangle, output_fn) where - llvmOpts = if cTargetOS == OSX + -- Bug in LLVM at O3 on OSX. + llvmOpts = if platformOS (targetPlatform dflags) == OSDarwin then ["-O1", "-O2", "-O2"] else ["-O1", "-O2", "-O3"] - ----------------------------------------------------------------------------- -- LlvmMangle phase @@ -1651,7 +1645,7 @@ linkBinary dflags o_files dep_packages = do -- Permit the linker to auto link _symbol to _imp_symbol. -- This lets us link against DLLs without needing an "import library". - ++ (if cTargetOS == Windows + ++ (if platformOS (targetPlatform dflags) == OSMinGW32 then ["-Wl,--enable-auto-import"] else []) @@ -1685,13 +1679,13 @@ linkBinary dflags o_files dep_packages = do exeFileName :: DynFlags -> FilePath exeFileName dflags | Just s <- outputFile dflags = - if cTargetOS == Windows + if platformOS (targetPlatform dflags) == OSMinGW32 then if null (takeExtension s) then s <.> "exe" else s else s | otherwise = - if cTargetOS == Windows + if platformOS (targetPlatform dflags) == OSMinGW32 then "main.exe" else "a.out" @@ -2013,5 +2007,4 @@ hscNextPhase dflags _ hsc_lang = HscLlvm -> LlvmOpt HscNothing -> StopLn HscInterpreted -> StopLn - _other -> StopLn