summaryrefslogtreecommitdiff
path: root/compiler/cmm/CmmLive.hs
diff options
context:
space:
mode:
authorMichael D. Adams <t-madams@microsoft.com>2007-05-23 10:51:12 +0000
committerMichael D. Adams <t-madams@microsoft.com>2007-05-23 10:51:12 +0000
commit53a82428d5e18a016dbc6b604d88577e7dc916e5 (patch)
tree8cda5150cef4a14e8ef576885da6dad2cb054608 /compiler/cmm/CmmLive.hs
parent46b28f7bfdd535e9fe5217a1151bedfb2cc15472 (diff)
downloadhaskell-53a82428d5e18a016dbc6b604d88577e7dc916e5.tar.gz
Refined the handling of stack frame headers
Diffstat (limited to 'compiler/cmm/CmmLive.hs')
-rw-r--r--compiler/cmm/CmmLive.hs13
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