diff options
| author | Sylvain Henry <sylvain@haskus.fr> | 2020-03-26 15:10:03 +0100 |
|---|---|---|
| committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-06-13 02:13:01 -0400 |
| commit | 2517a51c0f949c1021de9f7c16f67345c6ab78a9 (patch) | |
| tree | 82c806209b25125a428a6415ade64d6c95de9328 /compiler/GHC/CmmToLlvm/CodeGen.hs | |
| parent | 3445b9652671280920755ee3d2b49780eeb3a991 (diff) | |
| download | haskell-2517a51c0f949c1021de9f7c16f67345c6ab78a9.tar.gz | |
DynFlags refactoring VIII (#17957)
* Remove several uses of `sdocWithDynFlags`, especially in GHC.Llvm.*
* Add LlvmOpts datatype to store Llvm backend options
* Remove Outputable instances (for LlvmVar, LlvmLit, LlvmStatic and
Llvm.MetaExpr) which require LlvmOpts.
* Rename ppMetaExpr into ppMetaAnnotExpr (pprMetaExpr is now used in place of `ppr :: MetaExpr -> SDoc`)
Diffstat (limited to 'compiler/GHC/CmmToLlvm/CodeGen.hs')
| -rw-r--r-- | compiler/GHC/CmmToLlvm/CodeGen.hs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/compiler/GHC/CmmToLlvm/CodeGen.hs b/compiler/GHC/CmmToLlvm/CodeGen.hs index e106a5e111..672fc84e43 100644 --- a/compiler/GHC/CmmToLlvm/CodeGen.hs +++ b/compiler/GHC/CmmToLlvm/CodeGen.hs @@ -178,7 +178,7 @@ barrier = do -- exceptions (where no code will be emitted instead). barrierUnless :: [Arch] -> LlvmM StmtData barrierUnless exs = do - platform <- getLlvmPlatform + platform <- getPlatform if platformArch platform `elem` exs then return (nilOL, []) else barrier @@ -415,7 +415,7 @@ genCall target res args = do ++ " 0 or 1, given " ++ show (length t) ++ "." -- extract Cmm call convention, and translate to LLVM call convention - platform <- lift $ getLlvmPlatform + platform <- lift $ getPlatform let lmconv = case target of ForeignTarget _ (ForeignConvention conv _ _ _) -> case conv of @@ -993,6 +993,7 @@ genStore_slow addr val meta = do let stmts = stmts1 `appOL` stmts2 dflags <- getDynFlags platform <- getPlatform + opts <- getLlvmOpts case getVarType vaddr of -- sometimes we need to cast an int to a pointer before storing LMPointer ty@(LMPointer _) | getVarType vval == llvmWord platform -> do @@ -1015,7 +1016,7 @@ genStore_slow addr val meta = do (PprCmm.pprExpr platform addr <+> text ( "Size of Ptr: " ++ show (llvmPtrBits platform) ++ ", Size of var: " ++ show (llvmWidthInBits platform other) ++ - ", Var: " ++ showSDoc dflags (ppr vaddr))) + ", Var: " ++ showSDoc dflags (ppVar opts vaddr))) -- | Unconditional branch @@ -1041,7 +1042,8 @@ genCondBranch cond idT idF likely = do return (stmts1 `appOL` stmts2 `snocOL` s1, top1 ++ top2) else do dflags <- getDynFlags - panic $ "genCondBranch: Cond expr not bool! (" ++ showSDoc dflags (ppr vc) ++ ")" + opts <- getLlvmOpts + panic $ "genCondBranch: Cond expr not bool! (" ++ showSDoc dflags (ppVar opts vc) ++ ")" -- | Generate call to llvm.expect.x intrinsic. Assigning result to a new var. @@ -1663,6 +1665,7 @@ genLoad_slow :: Atomic -> CmmExpr -> CmmType -> [MetaAnnot] -> LlvmM ExprData genLoad_slow atomic e ty meta = do platform <- getPlatform dflags <- getDynFlags + opts <- getLlvmOpts runExprData $ do iptr <- exprToVarW e case getVarType iptr of @@ -1678,7 +1681,7 @@ genLoad_slow atomic e ty meta = do (PprCmm.pprExpr platform e <+> text ( "Size of Ptr: " ++ show (llvmPtrBits platform) ++ ", Size of var: " ++ show (llvmWidthInBits platform other) ++ - ", Var: " ++ showSDoc dflags (ppr iptr))) + ", Var: " ++ showSDoc dflags (ppVar opts iptr))) where loadInstr ptr | atomic = ALoad SyncSeqCst False ptr | otherwise = Load ptr @@ -1873,7 +1876,7 @@ funEpilogue live = do loadUndef r = do let ty = (pLower . getVarType $ lmGlobalRegVar platform r) return (Just $ LMLitVar $ LMUndefLit ty, nilOL) - platform <- getDynFlag targetPlatform + platform <- getPlatform let allRegs = activeStgRegs platform loads <- flip mapM allRegs $ \r -> case () of _ | (False, r) `elem` livePadded |
