summaryrefslogtreecommitdiff
path: root/compiler/cmm/CmmSpillReload.hs
diff options
context:
space:
mode:
authorunknown <simonpj@.europe.corp.microsoft.com>2011-04-13 09:18:39 +0100
committerunknown <simonpj@.europe.corp.microsoft.com>2011-04-13 09:18:39 +0100
commit8419203b7eb5aa4bb13f8d1263632de4d10a4048 (patch)
tree811359feb7f282d19bc63f34e66663f812e7be0a /compiler/cmm/CmmSpillReload.hs
parent83f16ade9edf272c88c6b2ed8b8e951b905fe130 (diff)
parenta52ff7619e8b7d74a9d933d922eeea49f580bca8 (diff)
downloadhaskell-8419203b7eb5aa4bb13f8d1263632de4d10a4048.tar.gz
Merge branch 'master' of c:/code/HEAD-git/. into ghc-generics
Diffstat (limited to 'compiler/cmm/CmmSpillReload.hs')
-rw-r--r--compiler/cmm/CmmSpillReload.hs10
1 files changed, 5 insertions, 5 deletions
diff --git a/compiler/cmm/CmmSpillReload.hs b/compiler/cmm/CmmSpillReload.hs
index 4e2dd38fd3..17364ad052 100644
--- a/compiler/cmm/CmmSpillReload.hs
+++ b/compiler/cmm/CmmSpillReload.hs
@@ -100,11 +100,11 @@ dualLiveTransfers entry procPoints = mkBTransfer3 first middle last
where check live id x = if id == entry then noLiveOnEntry id (in_regs live) x else x
middle :: CmmNode O O -> DualLive -> DualLive
- middle m live = changeStack updSlots $ changeRegs (xferLiveMiddle m) (changeRegs regs_in live)
- where xferLiveMiddle = case getBTransfer3 xferLive of (_, middle, _) -> middle
- regs_in :: RegSet -> RegSet
- regs_in live = case m of CmmUnsafeForeignCall {} -> emptyRegSet
- _ -> live
+ middle m = changeStack updSlots
+ . changeRegs updRegs
+ where -- Reuse middle of liveness analysis from CmmLive
+ updRegs = case getBTransfer3 xferLive of (_, middle, _) -> middle m
+
updSlots live = foldSlotsUsed reload (foldSlotsDefd spill live m) m
spill live s@(RegSlot r, _, _) = check s $ deleteFromRegSet live r
spill live _ = live