[commit: ghc] master: Only use TBAA when LLVM > 2.8. (#5782) (8783718)
David Terei
davidterei at gmail.com
Tue Jan 17 09:31:46 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/878371810de61632d58962608fb3db588d9c2fbd
>---------------------------------------------------------------
commit 878371810de61632d58962608fb3db588d9c2fbd
Author: David Terei <davidterei at gmail.com>
Date: Tue Jan 17 00:23:22 2012 -0800
Only use TBAA when LLVM > 2.8. (#5782)
>---------------------------------------------------------------
compiler/llvmGen/LlvmCodeGen.hs | 5 ++++-
compiler/main/DriverPipeline.hs | 10 ++++++++--
compiler/main/DynFlags.hs | 21 +++++++++++++--------
3 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/compiler/llvmGen/LlvmCodeGen.hs b/compiler/llvmGen/LlvmCodeGen.hs
index 00f4292..531d90a 100644
--- a/compiler/llvmGen/LlvmCodeGen.hs
+++ b/compiler/llvmGen/LlvmCodeGen.hs
@@ -27,6 +27,7 @@ import UniqSupply
import Util
import SysTools ( figureLlvmVersion )
+import Data.IORef ( writeIORef )
import Data.Maybe ( fromMaybe )
import System.IO
@@ -47,10 +48,12 @@ llvmCodeGen dflags h us cmms
in (d,env')
in do
showPass dflags "LlVM CodeGen"
- bufh <- newBufHandle h
dumpIfSet_dyn dflags Opt_D_dump_llvm "LLVM Code" $ docToSDoc pprLlvmHeader
+ bufh <- newBufHandle h
Prt.bufLeftRender bufh $ pprLlvmHeader
ver <- (fromMaybe defaultLlvmVersion) `fmap` figureLlvmVersion dflags
+ -- cache llvm version for later use
+ writeIORef (llvmVersion dflags) ver
env' <- {-# SCC "llvm_datas_gen" #-}
cmmDataLlvmGens dflags bufh (setLlvmVer ver env) cdata []
{-# SCC "llvm_procs_gen" #-}
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index f1c0417..df6e7fd 100644
--- a/compiler/main/DriverPipeline.hs
+++ b/compiler/main/DriverPipeline.hs
@@ -1306,6 +1306,8 @@ runPhase SplitAs _input_fn dflags
runPhase LlvmOpt input_fn dflags
= do
+ ver <- io $ readIORef (llvmVersion dflags)
+
let lo_opts = getOpts dflags opt_lo
opt_lvl = max 0 (min 2 $ optLevel dflags)
-- don't specify anything if user has specified commands. We do this
@@ -1315,7 +1317,8 @@ runPhase LlvmOpt input_fn dflags
optFlag = if null lo_opts
then [SysTools.Option (llvmOpts !! opt_lvl)]
else []
- tbaa | dopt Opt_LlvmTBAA dflags = "--enable-tbaa=true"
+ tbaa | ver < 29 = "" -- no tbaa in 2.8 and earlier
+ | dopt Opt_LlvmTBAA dflags = "--enable-tbaa=true"
| otherwise = "--enable-tbaa=false"
@@ -1340,12 +1343,15 @@ runPhase LlvmOpt input_fn dflags
runPhase LlvmLlc input_fn dflags
= do
+ ver <- io $ readIORef (llvmVersion dflags)
+
let lc_opts = getOpts dflags opt_lc
opt_lvl = max 0 (min 2 $ optLevel dflags)
rmodel | opt_PIC = "pic"
| not opt_Static = "dynamic-no-pic"
| otherwise = "static"
- tbaa | dopt Opt_LlvmTBAA dflags = "--enable-tbaa=true"
+ tbaa | ver < 29 = "" -- no tbaa in 2.8 and earlier
+ | dopt Opt_LlvmTBAA dflags = "--enable-tbaa=true"
| otherwise = "--enable-tbaa=false"
-- hidden debugging flag '-dno-llvm-mangler' to skip mangling
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index a443989..bcd43e3 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -588,7 +588,9 @@ data DynFlags = DynFlags {
haddockOptions :: Maybe String,
-- | what kind of {-# SCC #-} to add automatically
- profAuto :: ProfAuto
+ profAuto :: ProfAuto,
+
+ llvmVersion :: IORef (Int)
}
class HasDynFlags m where
@@ -824,13 +826,15 @@ initDynFlags dflags = do
refFilesToClean <- newIORef []
refDirsToClean <- newIORef Map.empty
refGeneratedDumps <- newIORef Set.empty
+ refLlvmVersion <- newIORef 28
return dflags{
- ways = ways,
- buildTag = mkBuildTag (filter (not . wayRTSOnly) ways),
- rtsBuildTag = mkBuildTag ways,
- filesToClean = refFilesToClean,
- dirsToClean = refDirsToClean,
- generatedDumps = refGeneratedDumps
+ ways = ways,
+ buildTag = mkBuildTag (filter (not . wayRTSOnly) ways),
+ rtsBuildTag = mkBuildTag ways,
+ filesToClean = refFilesToClean,
+ dirsToClean = refDirsToClean,
+ generatedDumps = refGeneratedDumps,
+ llvmVersion = refLlvmVersion
}
-- | The normal 'DynFlags'. Note that they is not suitable for use in this form
@@ -922,7 +926,8 @@ defaultDynFlags mySettings =
extensions = [],
extensionFlags = flattenExtensionFlags Nothing [],
log_action = defaultLogAction,
- profAuto = NoProfAuto
+ profAuto = NoProfAuto,
+ llvmVersion = panic "defaultDynFlags: No llvmVersion"
}
type LogAction = Severity -> SrcSpan -> PprStyle -> MsgDoc -> IO ()
More information about the Cvs-ghc
mailing list