summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Mainland <gmainlan@microsoft.com>2012-10-17 17:03:13 +0100
committerGeoffrey Mainland <gmainlan@microsoft.com>2012-10-30 12:50:54 +0000
commit8e8168446a6f1fe2747ba10bc76053097862f4db (patch)
tree7445ec05077e5508ccafd3cd7c3ed430e25142ac
parent092c0bd466230cf248ecb996fd5891c413ed7b7d (diff)
downloadhaskell-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.hs2
-rw-r--r--compiler/cmm/OldCmm.hs2
-rw-r--r--compiler/cmm/OldPprCmm.hs4
-rw-r--r--compiler/llvmGen/LlvmCodeGen/CodeGen.hs6
-rw-r--r--compiler/nativeGen/X86/CodeGen.hs5
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
--------------------------------------------------------------------------------