From: Michael D. Adams Date: Fri, 25 May 2007 19:57:32 +0000 (+0000) Subject: Move global register saving from the backend to codeGen (CPS specific parts) X-Git-Tag: Before_type_family_merge~628 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=a6af1f12c4b83745dacf955ac2920897ec7ae145 Move global register saving from the backend to codeGen (CPS specific parts) --- 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