X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FnativeGen%2FRegAlloc%2FLiveness.hs;fp=compiler%2FnativeGen%2FRegAlloc%2FLiveness.hs;h=cc1bf12dd77876940c18aa9d67268b35e8ec7444;hp=61e800f46186c19fc6e45e7822dfb157fe526e19;hb=c66391a745efa86bab4e9659e4d04ba514359164;hpb=06f647d9ced1a395c812a265a40d2ff1699d3ca2 diff --git a/compiler/nativeGen/RegAlloc/Liveness.hs b/compiler/nativeGen/RegAlloc/Liveness.hs index 61e800f..cc1bf12 100644 --- a/compiler/nativeGen/RegAlloc/Liveness.hs +++ b/compiler/nativeGen/RegAlloc/Liveness.hs @@ -27,6 +27,7 @@ module RegAlloc.Liveness ( eraseDeltasLive, patchEraseLive, patchRegsLiveInstr, + reverseBlocksInTops, regLiveness, natCmmTopToLive ) where @@ -670,9 +671,6 @@ regLiveness (CmmProc info lbl params sccs) lbl params ann_sccs - - - -- ----------------------------------------------------------------------------- -- | Check ordering of Blocks -- The computeLiveness function requires SCCs to be in reverse dependent order. @@ -711,8 +709,17 @@ checkIsReverseDependent sccs' = unionManyUniqSets $ map (mkUniqSet . jumpDestsOfInstr) [ i | LiveInstr i _ <- instrs] - + +-- | If we've compute liveness info for this code already we have to reverse +-- the SCCs in each top to get them back to the right order so we can do it again. +reverseBlocksInTops :: LiveCmmTop instr -> LiveCmmTop instr +reverseBlocksInTops top + = case top of + CmmData{} -> top + CmmProc info lbl params sccs -> CmmProc info lbl params (reverse sccs) + + -- | Computing liveness -- -- On entry, the SCCs must be in "reverse" order: later blocks may transfer