[commit: ghc] master: bugfix: coalescing moves from RealReg to VirtualReg got broken at some point (b5c84a1)
Simon Marlow
marlowsd at gmail.com
Fri Jul 6 17:50:14 CEST 2012
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/b5c84a16f4f92a486c63d90d0d00796c884b361c
>---------------------------------------------------------------
commit b5c84a16f4f92a486c63d90d0d00796c884b361c
Author: Simon Marlow <marlowsd at gmail.com>
Date: Fri Jul 6 13:20:44 2012 +0100
bugfix: coalescing moves from RealReg to VirtualReg got broken at some point
>---------------------------------------------------------------
compiler/nativeGen/RegAlloc/Linear/Main.hs | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/compiler/nativeGen/RegAlloc/Linear/Main.hs b/compiler/nativeGen/RegAlloc/Linear/Main.hs
index 8c38fd1..b2da1f9 100644
--- a/compiler/nativeGen/RegAlloc/Linear/Main.hs
+++ b/compiler/nativeGen/RegAlloc/Linear/Main.hs
@@ -385,7 +385,7 @@ raInsn platform block_live new_instrs id (LiveInstr (Instr instr) (Just live))
Just (src,dst) | src `elementOfUniqSet` (liveDieRead live),
isVirtualReg dst,
not (dst `elemUFM` assig),
- Just (InReg _) <- (lookupUFM assig src) -> do
+ isRealReg src || isInReg src assig -> do
case src of
(RegReal rr) -> setAssigR (addToUFM assig dst (InReg rr))
-- if src is a fixed reg, then we just map dest to this
@@ -414,6 +414,11 @@ raInsn _ _ _ _ instr
= pprPanic "raInsn" (text "no match for:" <> ppr instr)
+isInReg :: Reg -> RegMap Loc -> Bool
+isInReg src assig | Just (InReg _) <- lookupUFM assig src = True
+ | otherwise = False
+
+
genRaInsn :: (FR freeRegs, Instruction instr, Outputable instr)
=> Platform
-> BlockMap RegSet
More information about the Cvs-ghc
mailing list