diff options
| author | Ben Gamari <bgamari.foss@gmail.com> | 2015-02-09 15:21:28 -0600 |
|---|---|---|
| committer | Austin Seipp <austin@well-typed.com> | 2015-02-09 21:07:27 -0600 |
| commit | 5d5abdca31cdb4db5303999778fa25c4a1371084 (patch) | |
| tree | d6dee9b391d24f86859b36846da4090839ed7513 /compiler/llvmGen/LlvmCodeGen/Base.hs | |
| parent | d5a80dbe2ea03099c085020142528fcd39059a27 (diff) | |
| download | haskell-5d5abdca31cdb4db5303999778fa25c4a1371084.tar.gz | |
llvmGen: move to LLVM 3.6 exclusively
Summary:
Rework llvmGen to use LLVM 3.6 exclusively. The plans for the 7.12 release are to ship LLVM alongside GHC in the interests of user (and developer) sanity.
Along the way, refactor TNTC support to take advantage of the new `prefix` data support in LLVM 3.6. This allows us to drop the section-reordering component of the LLVM mangler.
Test Plan: Validate, look at emitted code
Reviewers: dterei, austin, scpmw
Reviewed By: austin
Subscribers: erikd, awson, spacekitteh, thomie, carter
Differential Revision: https://phabricator.haskell.org/D530
GHC Trac Issues: #10074
Diffstat (limited to 'compiler/llvmGen/LlvmCodeGen/Base.hs')
| -rw-r--r-- | compiler/llvmGen/LlvmCodeGen/Base.hs | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen/Base.hs b/compiler/llvmGen/LlvmCodeGen/Base.hs index 83b06a9a1b..15918a3a45 100644 --- a/compiler/llvmGen/LlvmCodeGen/Base.hs +++ b/compiler/llvmGen/LlvmCodeGen/Base.hs @@ -24,11 +24,10 @@ module LlvmCodeGen.Base ( getMetaUniqueId, setUniqMeta, getUniqMeta, - freshSectionId, cmmToLlvmType, widthToLlvmFloat, widthToLlvmInt, llvmFunTy, - llvmFunSig, llvmStdFunAttrs, llvmFunAlign, llvmInfAlign, - llvmPtrBits, mkLlvmFunc, tysToParams, + llvmFunSig, llvmFunArgs, llvmStdFunAttrs, llvmFunAlign, llvmInfAlign, + llvmPtrBits, tysToParams, strCLabel_llvm, strDisplayName_llvm, strProcedureName_llvm, getGlobalPtr, generateExternDecls, @@ -133,15 +132,6 @@ llvmFunSig' live lbl link (map (toParams . getVarType) (llvmFunArgs dflags live)) (llvmFunAlign dflags) --- | Create a Haskell function in LLVM. -mkLlvmFunc :: LiveGlobalRegs -> CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks - -> LlvmM LlvmFunction -mkLlvmFunc live lbl link sec blks - = do funDec <- llvmFunSig live lbl link - dflags <- getDynFlags - let funArgs = map (fsLit . Outp.showSDoc dflags . ppPlainName) (llvmFunArgs dflags live) - return $ LlvmFunction funDec funArgs llvmStdFunAttrs sec blks - -- | Alignment to use for functions llvmFunAlign :: DynFlags -> LMAlign llvmFunAlign dflags = Just (wORD_SIZE dflags) @@ -186,13 +176,13 @@ type LlvmVersion = Int -- | The LLVM Version we assume if we don't know defaultLlvmVersion :: LlvmVersion -defaultLlvmVersion = 30 +defaultLlvmVersion = 36 minSupportLlvmVersion :: LlvmVersion -minSupportLlvmVersion = 28 +minSupportLlvmVersion = 36 maxSupportLlvmVersion :: LlvmVersion -maxSupportLlvmVersion = 35 +maxSupportLlvmVersion = 36 -- ---------------------------------------------------------------------------- -- * Environment Handling @@ -203,7 +193,6 @@ data LlvmEnv = LlvmEnv , envDynFlags :: DynFlags -- ^ Dynamic flags , envOutput :: BufHandle -- ^ Output buffer , envUniq :: UniqSupply -- ^ Supply of unique values - , envNextSection :: Int -- ^ Supply of fresh section IDs , envFreshMeta :: Int -- ^ Supply of fresh metadata IDs , envUniqMeta :: UniqFM Int -- ^ Global metadata nodes , envFunMap :: LlvmEnvMap -- ^ Global functions so far, with type @@ -257,7 +246,6 @@ runLlvm dflags ver out us m = do , envUniq = us , envFreshMeta = 0 , envUniqMeta = emptyUFM - , envNextSection = 1 } -- | Get environment (internal) @@ -362,10 +350,6 @@ setUniqMeta f m = modifyEnv $ \env -> env { envUniqMeta = addToUFM (envUniqMeta getUniqMeta :: Unique -> LlvmM (Maybe Int) getUniqMeta s = getEnv (flip lookupUFM s . envUniqMeta) --- | Returns a fresh section ID -freshSectionId :: LlvmM Int -freshSectionId = LlvmM $ \env -> return (envNextSection env, env { envNextSection = envNextSection env + 1}) - -- ---------------------------------------------------------------------------- -- * Internal functions -- |
