X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmLive.hs;h=8d13505d36d86c59eed4ecdd883a94c115a3d784;hb=b3ccd6d5a4366dc8089fd9c49f5edf43077de009;hp=0a4eb67ae373a9d44fd2a5044ef0f1ba00504971;hpb=3de1c72b6fdc52cd9c1938f21b8d284cc3cdbbc9;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmLive.hs b/compiler/cmm/CmmLive.hs index 0a4eb67..8d13505 100644 --- a/compiler/cmm/CmmLive.hs +++ b/compiler/cmm/CmmLive.hs @@ -1,8 +1,11 @@ module CmmLive ( CmmLive, BlockEntryLiveness, - cmmLiveness + cmmLiveness, + cmmFormalsToLiveLocals ) where +#include "HsVersions.h" + import Cmm import Dataflow @@ -156,6 +159,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 +178,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