From a6af1f12c4b83745dacf955ac2920897ec7ae145 Mon Sep 17 00:00:00 2001 From: "Michael D. Adams" Date: Fri, 25 May 2007 19:57:32 +0000 Subject: [PATCH] Move global register saving from the backend to codeGen (CPS specific parts) --- compiler/cmm/CmmBrokenBlock.hs | 17 ++++++++--------- compiler/cmm/CmmCPS.hs | 5 ++--- compiler/cmm/CmmLive.hs | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/compiler/cmm/CmmBrokenBlock.hs b/compiler/cmm/CmmBrokenBlock.hs index 2468260..b367216 100644 --- a/compiler/cmm/CmmBrokenBlock.hs +++ b/compiler/cmm/CmmBrokenBlock.hs @@ -81,7 +81,6 @@ data FinalStmt CmmFormals -- ^ Results from call -- (redundant with ContinuationEntry) CmmActuals -- ^ Arguments to call - (Maybe [GlobalReg]) -- ^ registers that must be saved (TODO) | FinalSwitch -- ^ Same as a 'CmmSwitch' CmmExpr -- ^ Scrutinee (zero based) @@ -130,16 +129,16 @@ breakBlock uniques (BasicBlock ident stmts) entry = -- Detect this special case to remain an inverse of -- 'cmmBlockFromBrokenBlock' - [CmmCall target results arguments saves, + [CmmCall target results arguments, CmmBranch next_id] -> [block] where block = do_call current_id entry accum_stmts exits next_id - target results arguments saves - (CmmCall target results arguments saves:stmts) -> block : rest + target results arguments + (CmmCall target results arguments:stmts) -> block : rest where next_id = BlockId $ head uniques block = do_call current_id entry accum_stmts exits next_id - target results arguments saves + target results arguments rest = breakBlock' (tail uniques) next_id (ContinuationEntry results) [] [] stmts (s:stmts) -> @@ -149,9 +148,9 @@ breakBlock uniques (BasicBlock ident stmts) entry = stmts do_call current_id entry accum_stmts exits next_id - target results arguments saves = + target results arguments = BrokenBlock current_id entry accum_stmts (next_id:exits) - (FinalCall next_id target results arguments saves) + (FinalCall next_id target results arguments) cond_branch_target (CmmCondBranch _ target) = [target] cond_branch_target _ = [] @@ -169,8 +168,8 @@ cmmBlockFromBrokenBlock (BrokenBlock ident _ stmts _ exit) = FinalReturn arguments -> [CmmReturn arguments] FinalJump target arguments -> [CmmJump target arguments] FinalSwitch expr targets -> [CmmSwitch expr targets] - FinalCall branch_target call_target results arguments saves -> - [CmmCall call_target results arguments saves, + FinalCall branch_target call_target results arguments -> + [CmmCall call_target results arguments, CmmBranch branch_target] ----------------------------------------------------------------------------- diff --git a/compiler/cmm/CmmCPS.hs b/compiler/cmm/CmmCPS.hs index 0fe63a7..33d21ee 100644 --- a/compiler/cmm/CmmCPS.hs +++ b/compiler/cmm/CmmCPS.hs @@ -265,15 +265,14 @@ continuationToProc formats (Continuation is_entry info label formals blocks) = arguments FinalJump target arguments -> exit_function curr_format target arguments - -- TODO: do something about global saves FinalCall next (CmmForeignCall target CmmCallConv) - results arguments saves -> + results arguments -> pack_continuation curr_format cont_format ++ [CmmJump target arguments] where cont_format = maybe unknown_block id $ lookup (mkReturnPtLabel $ getUnique next) formats - FinalCall next _ results arguments saves -> panic "unimplemented CmmCall" + FinalCall next _ results arguments -> panic "unimplemented CmmCall" -------------------------------------------------------------------------------- -- Functions that generate CmmStmt sequences diff --git a/compiler/cmm/CmmLive.hs b/compiler/cmm/CmmLive.hs index 8591aae..4fb4a29 100644 --- a/compiler/cmm/CmmLive.hs +++ b/compiler/cmm/CmmLive.hs @@ -171,7 +171,7 @@ cmmStmtLive _ (CmmAssign reg expr) = (CmmGlobal _) -> id cmmStmtLive _ (CmmStore expr1 expr2) = cmmExprLive expr2 . cmmExprLive expr1 -cmmStmtLive _ (CmmCall target results arguments _) = +cmmStmtLive _ (CmmCall target results arguments) = target_liveness . foldr ((.) . cmmExprLive) id (map fst arguments) . addKilled (mkUniqSet $ cmmFormalsToLiveLocals results) where -- 1.7.10.4