diff options
author | Geoffrey Mainland <gmainlan@microsoft.com> | 2012-10-17 17:03:13 +0100 |
---|---|---|
committer | Geoffrey Mainland <gmainlan@microsoft.com> | 2012-10-30 12:50:54 +0000 |
commit | 8e8168446a6f1fe2747ba10bc76053097862f4db (patch) | |
tree | 7445ec05077e5508ccafd3cd7c3ed430e25142ac | |
parent | 092c0bd466230cf248ecb996fd5891c413ed7b7d (diff) | |
download | haskell-8e8168446a6f1fe2747ba10bc76053097862f4db.tar.gz |
Cmm jumps always have live register information.
Jumps now always have live register information attached, so drop Maybes.
-rw-r--r-- | compiler/cmm/CmmCvt.hs | 2 | ||||
-rw-r--r-- | compiler/cmm/OldCmm.hs | 2 | ||||
-rw-r--r-- | compiler/cmm/OldPprCmm.hs | 4 | ||||
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/CodeGen.hs | 6 | ||||
-rw-r--r-- | compiler/nativeGen/X86/CodeGen.hs | 5 |
5 files changed, 9 insertions, 10 deletions
diff --git a/compiler/cmm/CmmCvt.hs b/compiler/cmm/CmmCvt.hs index 017d120d84..4830691a22 100644 --- a/compiler/cmm/CmmCvt.hs +++ b/compiler/cmm/CmmCvt.hs @@ -109,7 +109,7 @@ ofZgraph g = Old.ListGraph $ mapMaybe convert_block $ postorderDfs g | otherwise -> [Old.CmmCondBranch expr tid, Old.CmmBranch fid] CmmSwitch arg ids -> [Old.CmmSwitch arg ids] -- ToDo: STG Live - CmmCall e _ r _ _ _ -> [Old.CmmJump e (Just r)] + CmmCall e _ r _ _ _ -> [Old.CmmJump e r] CmmForeignCall {} -> panic "ofZgraph: CmmForeignCall" tail_of bid = case foldBlockNodesB3 (first, middle, last) block () of Old.BasicBlock _ stmts -> stmts diff --git a/compiler/cmm/OldCmm.hs b/compiler/cmm/OldCmm.hs index cf05db92b8..00f88a4e35 100644 --- a/compiler/cmm/OldCmm.hs +++ b/compiler/cmm/OldCmm.hs @@ -156,7 +156,7 @@ data CmmStmt | CmmJump -- Jump to another C-- function, CmmExpr -- Target - (Maybe [GlobalReg]) -- Live registers at call site; + [GlobalReg] -- Live registers at call site; -- Nothing -> no information, assume -- all live -- Just .. -> info on liveness, [] diff --git a/compiler/cmm/OldPprCmm.hs b/compiler/cmm/OldPprCmm.hs index dcde86e37c..edfaef8098 100644 --- a/compiler/cmm/OldPprCmm.hs +++ b/compiler/cmm/OldPprCmm.hs @@ -161,7 +161,7 @@ genCondBranch expr ident = -- -- jump foo(a, b, c); -- -genJump :: CmmExpr -> Maybe [GlobalReg] -> SDoc +genJump :: CmmExpr -> [GlobalReg] -> SDoc genJump expr live = hcat [ ptext (sLit "jump") , space @@ -171,7 +171,7 @@ genJump expr live = CmmLoad (CmmReg _) _ -> pprExpr expr _ -> parens (pprExpr expr) , semi <+> ptext (sLit "// ") - , maybe empty ppr live] + , ppr live] -- -------------------------------------------------------------------------- -- Return from a function. [1], Section 6.8.2 of version 1.128 diff --git a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs index 73cd98f63a..f73552dad8 100644 --- a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs +++ b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs @@ -510,7 +510,7 @@ cmmPrimOpFunctions env mop ++ " not supported here") -- | Tail function calls -genJump :: LlvmEnv -> CmmExpr -> Maybe [GlobalReg] -> UniqSM StmtData +genJump :: LlvmEnv -> CmmExpr -> [GlobalReg] -> UniqSM StmtData -- Call to known function genJump env (CmmLit (CmmLabel lbl)) live = do @@ -1258,10 +1258,10 @@ funPrologue dflags = concat $ map getReg $ activeStgRegs platform -- | Function epilogue. Load STG variables to use as argument for call. -- STG Liveness optimisation done here. -funEpilogue :: LlvmEnv -> Maybe [GlobalReg] -> UniqSM ([LlvmVar], LlvmStatements) +funEpilogue :: LlvmEnv -> [GlobalReg] -> UniqSM ([LlvmVar], LlvmStatements) -- Have information and liveness optimisation is enabled -funEpilogue env (Just live) | gopt Opt_RegLiveness dflags = do +funEpilogue env live | gopt Opt_RegLiveness dflags = do loads <- mapM loadExpr (activeStgRegs platform) let (vars, stmts) = unzip loads return (vars, concatOL stmts) diff --git a/compiler/nativeGen/X86/CodeGen.hs b/compiler/nativeGen/X86/CodeGen.hs index 7ab30bf922..89e81b48c9 100644 --- a/compiler/nativeGen/X86/CodeGen.hs +++ b/compiler/nativeGen/X86/CodeGen.hs @@ -173,9 +173,8 @@ stmtToInstrs stmt = do panic "stmtToInstrs: return statement should have been cps'd away" -jumpRegs :: DynFlags -> Maybe [GlobalReg] -> [Reg] -jumpRegs dflags Nothing = allHaskellArgRegs dflags -jumpRegs dflags (Just gregs) = [ RegReal r | Just r <- map (globalRegMaybe platform) gregs ] +jumpRegs :: DynFlags -> [GlobalReg] -> [Reg] +jumpRegs dflags gregs = [ RegReal r | Just r <- map (globalRegMaybe platform) gregs ] where platform = targetPlatform dflags -------------------------------------------------------------------------------- |