diff options
author | Michael D. Adams <t-madams@microsoft.com> | 2007-05-23 10:51:12 +0000 |
---|---|---|
committer | Michael D. Adams <t-madams@microsoft.com> | 2007-05-23 10:51:12 +0000 |
commit | 53a82428d5e18a016dbc6b604d88577e7dc916e5 (patch) | |
tree | 8cda5150cef4a14e8ef576885da6dad2cb054608 /compiler/cmm/CmmLive.hs | |
parent | 46b28f7bfdd535e9fe5217a1151bedfb2cc15472 (diff) | |
download | haskell-53a82428d5e18a016dbc6b604d88577e7dc916e5.tar.gz |
Refined the handling of stack frame headers
Diffstat (limited to 'compiler/cmm/CmmLive.hs')
-rw-r--r-- | compiler/cmm/CmmLive.hs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/compiler/cmm/CmmLive.hs b/compiler/cmm/CmmLive.hs index 0a4eb67ae3..771d4760d4 100644 --- a/compiler/cmm/CmmLive.hs +++ b/compiler/cmm/CmmLive.hs @@ -1,6 +1,7 @@ module CmmLive ( CmmLive, BlockEntryLiveness, - cmmLiveness + cmmLiveness, + cmmFormalsToLiveLocals ) where import Cmm @@ -156,6 +157,11 @@ addKilled new_killed live = live `minusUniqSet` new_killed -------------------------------- -- Liveness of a CmmStmt -------------------------------- +cmmFormalsToLiveLocals :: CmmFormals -> [LocalReg] +cmmFormalsToLiveLocals [] = [] +cmmFormalsToLiveLocals ((CmmGlobal _,_):args) = cmmFormalsToLiveLocals args +cmmFormalsToLiveLocals ((CmmLocal r,_):args) = r:cmmFormalsToLiveLocals args + cmmStmtLive :: BlockEntryLiveness -> CmmStmt -> CmmLivenessTransformer cmmStmtLive _ (CmmNop) = id cmmStmtLive _ (CmmComment _) = id @@ -170,10 +176,7 @@ cmmStmtLive _ (CmmStore expr1 expr2) = cmmStmtLive _ (CmmCall target results arguments _) = target_liveness . foldr ((.) . cmmExprLive) id (map fst arguments) . - addKilled (mkUniqSet $ only_local_regs results) where - only_local_regs [] = [] - only_local_regs ((CmmGlobal _,_):args) = only_local_regs args - only_local_regs ((CmmLocal r,_):args) = r:only_local_regs args + addKilled (mkUniqSet $ cmmFormalsToLiveLocals results) where target_liveness = case target of (CmmForeignCall target _) -> cmmExprLive target |