X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FnativeGen%2FRegAlloc%2FGraph%2FMain.hs;h=35ec879eb233a0fd6277a0b273e00c142d781de5;hb=335b9f366ac440259318777c4c07e4fa42fbbec6;hp=94b18aeb0a1b7bb0950504b56833001dfb016e7f;hpb=f9288086f935c97812b2d80defcff38baf7b6a6c;p=ghc-hetmet.git diff --git a/compiler/nativeGen/RegAlloc/Graph/Main.hs b/compiler/nativeGen/RegAlloc/Graph/Main.hs index 94b18ae..35ec879 100644 --- a/compiler/nativeGen/RegAlloc/Graph/Main.hs +++ b/compiler/nativeGen/RegAlloc/Graph/Main.hs @@ -11,7 +11,6 @@ module RegAlloc.Graph.Main ( where import qualified GraphColor as Color -import qualified GraphBase as Color import RegAlloc.Liveness import RegAlloc.Graph.Spill import RegAlloc.Graph.SpillClean @@ -311,9 +310,16 @@ graphAddCoalesce (r1, r2) graph (vr2, classOfVirtualReg vr2) graph - | otherwise - = panic "RegAlloc.Graph.Main.graphAddCoalesce: can't coalesce two real regs" + -- We can't coalesce two real regs, but there could well be existing + -- hreg,hreg moves in the input code. We'll just ignore these + -- for coalescing purposes. + | RegReal _ <- r1 + , RegReal _ <- r2 + = graph +graphAddCoalesce _ _ + = panic "graphAddCoalesce: bogus" + -- | Patch registers in code using the reg -> reg mapping in this graph. patchRegsFromGraph @@ -374,25 +380,13 @@ seqNode node `seq` (seqVirtualRegList (uniqSetToList (Color.nodeCoalesce node))) seqVirtualReg :: VirtualReg -> () -seqVirtualReg reg - = case reg of - VirtualRegI _ -> () - VirtualRegHi _ -> () - VirtualRegF _ -> () - VirtualRegD _ -> () +seqVirtualReg reg = reg `seq` () seqRealReg :: RealReg -> () -seqRealReg reg - = case reg of - RealRegSingle _ -> () - RealRegPair _ _ -> () +seqRealReg reg = reg `seq` () seqRegClass :: RegClass -> () -seqRegClass c - = case c of - RcInteger -> () - RcFloat -> () - RcDouble -> () +seqRegClass c = c `seq` () seqMaybeRealReg :: Maybe RealReg -> () seqMaybeRealReg mr