diff options
author | David Terei <davidterei@gmail.com> | 2010-06-21 12:52:20 +0000 |
---|---|---|
committer | David Terei <davidterei@gmail.com> | 2010-06-21 12:52:20 +0000 |
commit | 09e6aba8000ccf52943ada4fb9ac76e0d93a202f (patch) | |
tree | c0f513c69355bcc0b5bf2975e44708e0483407f7 /compiler/llvmGen/LlvmCodeGen/Data.hs | |
parent | 4bb4a1cfa8b88fefae3405d101dc6ff0f7adbae3 (diff) | |
download | haskell-09e6aba8000ccf52943ada4fb9ac76e0d93a202f.tar.gz |
Reduce the number of passes over the cmm in llvm BE
Diffstat (limited to 'compiler/llvmGen/LlvmCodeGen/Data.hs')
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/Data.hs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen/Data.hs b/compiler/llvmGen/LlvmCodeGen/Data.hs index e3d2adc079..13da03b840 100644 --- a/compiler/llvmGen/LlvmCodeGen/Data.hs +++ b/compiler/llvmGen/LlvmCodeGen/Data.hs @@ -15,7 +15,6 @@ import BlockId import CLabel import Cmm -import DynFlags import FastString import qualified Outputable @@ -38,8 +37,8 @@ structStr = fsLit "_struct" -- complete this completely though as we need to pass all CmmStatic -- sections before all references can be resolved. This last step is -- done by 'resolveLlvmData'. -genLlvmData :: DynFlags -> (Section, [CmmStatic]) -> LlvmUnresData -genLlvmData _ ( _ , (CmmDataLabel lbl):xs) = +genLlvmData :: [CmmStatic] -> LlvmUnresData +genLlvmData (CmmDataLabel lbl:xs) = let static = map genData xs label = strCLabel_llvm lbl @@ -51,20 +50,20 @@ genLlvmData _ ( _ , (CmmDataLabel lbl):xs) = alias = LMAlias (label `appendFS` structStr) strucTy in (lbl, alias, static) -genLlvmData _ _ = panic "genLlvmData: CmmData section doesn't start with label!" +genLlvmData _ = panic "genLlvmData: CmmData section doesn't start with label!" -resolveLlvmDatas :: DynFlags -> LlvmEnv -> [LlvmUnresData] -> [LlvmData] +resolveLlvmDatas :: LlvmEnv -> [LlvmUnresData] -> [LlvmData] -> (LlvmEnv, [LlvmData]) -resolveLlvmDatas _ env [] ldata +resolveLlvmDatas env [] ldata = (env, ldata) -resolveLlvmDatas dflags env (udata : rest) ldata - = let (env', ndata) = resolveLlvmData dflags env udata - in resolveLlvmDatas dflags env' rest (ldata ++ [ndata]) +resolveLlvmDatas env (udata : rest) ldata + = let (env', ndata) = resolveLlvmData env udata + in resolveLlvmDatas env' rest (ldata ++ [ndata]) -- | Fix up CLabel references now that we should have passed all CmmData. -resolveLlvmData :: DynFlags -> LlvmEnv -> LlvmUnresData -> (LlvmEnv, LlvmData) -resolveLlvmData _ env (lbl, alias, unres) = +resolveLlvmData :: LlvmEnv -> LlvmUnresData -> (LlvmEnv, LlvmData) +resolveLlvmData env (lbl, alias, unres) = let (env', static, refs) = resDatas env unres ([], []) refs' = catMaybes refs struct = Just $ LMStaticStruc static alias |