summaryrefslogtreecommitdiff
path: root/compiler/llvmGen/LlvmCodeGen
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2016-06-17 22:57:38 +0200
committerBen Gamari <ben@smart-cactus.org>2016-06-18 11:45:10 +0200
commit2396d9bb76c11775589fc91b362a61c4a92d27fa (patch)
tree8974307980358a9aadace3f9e60a5c1a25a4a832 /compiler/llvmGen/LlvmCodeGen
parent3e8c495f2e6557c85c65c7fc91113f45b010d333 (diff)
downloadhaskell-2396d9bb76c11775589fc91b362a61c4a92d27fa.tar.gz
llvmGen: Make metadata ids a newtype
These were previously just represented as Ints which was needlessly vague.
Diffstat (limited to 'compiler/llvmGen/LlvmCodeGen')
-rw-r--r--compiler/llvmGen/LlvmCodeGen/Base.hs18
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen/Base.hs b/compiler/llvmGen/LlvmCodeGen/Base.hs
index 3e2b795650..392c069822 100644
--- a/compiler/llvmGen/LlvmCodeGen/Base.hs
+++ b/compiler/llvmGen/LlvmCodeGen/Base.hs
@@ -44,7 +44,7 @@ import CLabel
import CodeGen.Platform ( activeStgRegs )
import DynFlags
import FastString
-import Cmm
+import Cmm hiding ( succ )
import Outputable as Outp
import qualified Pretty as Prt
import Platform
@@ -193,8 +193,8 @@ data LlvmEnv = LlvmEnv
, envDynFlags :: DynFlags -- ^ Dynamic flags
, envOutput :: BufHandle -- ^ Output buffer
, envUniq :: UniqSupply -- ^ Supply of unique values
- , envFreshMeta :: Int -- ^ Supply of fresh metadata IDs
- , envUniqMeta :: UniqFM Int -- ^ Global metadata nodes
+ , envFreshMeta :: MetaId -- ^ Supply of fresh metadata IDs
+ , envUniqMeta :: UniqFM MetaId -- ^ Global metadata nodes
, envFunMap :: LlvmEnvMap -- ^ Global functions so far, with type
, envAliases :: UniqSet LMString -- ^ Globals that we had to alias, see [Llvm Forward References]
, envUsedVars :: [LlvmVar] -- ^ Pointers to be added to llvm.used (see @cmmUsedLlvmGens@)
@@ -256,7 +256,7 @@ runLlvm dflags ver out us m = do
, envDynFlags = dflags
, envOutput = out
, envUniq = us
- , envFreshMeta = 0
+ , envFreshMeta = MetaId 0
, envUniqMeta = emptyUFM
}
@@ -301,8 +301,9 @@ checkStackReg :: GlobalReg -> LlvmM Bool
checkStackReg r = getEnv ((elem r) . envStackRegs)
-- | Allocate a new global unnamed metadata identifier
-getMetaUniqueId :: LlvmM Int
-getMetaUniqueId = LlvmM $ \env -> return (envFreshMeta env, env { envFreshMeta = envFreshMeta env + 1})
+getMetaUniqueId :: LlvmM MetaId
+getMetaUniqueId = LlvmM $ \env ->
+ return (envFreshMeta env, env { envFreshMeta = succ $ envFreshMeta env })
-- | Get the LLVM version we are generating code for
getLlvmVer :: LlvmM LlvmVersion
@@ -350,10 +351,11 @@ saveAlias :: LMString -> LlvmM ()
saveAlias lbl = modifyEnv $ \env -> env { envAliases = addOneToUniqSet (envAliases env) lbl }
-- | Sets metadata node for a given unique
-setUniqMeta :: Unique -> Int -> LlvmM ()
+setUniqMeta :: Unique -> MetaId -> LlvmM ()
setUniqMeta f m = modifyEnv $ \env -> env { envUniqMeta = addToUFM (envUniqMeta env) f m }
+
-- | Gets metadata node for given unique
-getUniqMeta :: Unique -> LlvmM (Maybe Int)
+getUniqMeta :: Unique -> LlvmM (Maybe MetaId)
getUniqMeta s = getEnv (flip lookupUFM s . envUniqMeta)
-- ----------------------------------------------------------------------------