X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FnativeGen%2FRegAlloc%2FGraph%2FSpillCost.hs;h=0dc25f58d219ab7476c5eb6e28779b47f0a1dd39;hb=09732d3c8ba3b8ab3ebfc5596cc8fdd7f2bb100f;hp=97995871af92d005492783d681585a42b49fb5a6;hpb=e17cf7ff32778f4e6b3622855f25426251e843d6;p=ghc-hetmet.git diff --git a/compiler/nativeGen/RegAlloc/Graph/SpillCost.hs b/compiler/nativeGen/RegAlloc/Graph/SpillCost.hs index 9799587..0dc25f5 100644 --- a/compiler/nativeGen/RegAlloc/Graph/SpillCost.hs +++ b/compiler/nativeGen/RegAlloc/Graph/SpillCost.hs @@ -78,12 +78,9 @@ slurpSpillCostInfo cmm -- lookup the regs that are live on entry to this block in -- the info table from the CmmProc countBlock info (BasicBlock blockId instrs) - | LiveInfo _ _ (Just blockLive) <- info - , Just rsLiveEntry <- lookupBlockEnv blockLive blockId - - , rsLiveEntry_virt <- mapUniqSet (\(RegVirtual vr) -> vr) - $ filterUniqSet isVirtualReg rsLiveEntry - + | LiveInfo _ _ (Just blockLive) _ <- info + , Just rsLiveEntry <- lookupBlockEnv blockLive blockId + , rsLiveEntry_virt <- takeVirtuals rsLiveEntry = countLIs rsLiveEntry_virt instrs | otherwise @@ -112,10 +109,6 @@ slurpSpillCostInfo cmm mapM_ incDefs $ catMaybes $ map takeVirtualReg $ nub written -- compute liveness for entry to next instruction. - let takeVirtuals set - = mapUniqSet (\(RegVirtual vr) -> vr) - $ filterUniqSet isVirtualReg set - let liveDieRead_virt = takeVirtuals (liveDieRead live) let liveDieWrite_virt = takeVirtuals (liveDieWrite live) let liveBorn_virt = takeVirtuals (liveBorn live) @@ -134,6 +127,13 @@ slurpSpillCostInfo cmm incLifetime reg = modify $ \s -> addToUFM_C plusSpillCostRecord s reg (reg, 0, 0, 1) +takeVirtuals :: UniqSet Reg -> UniqSet VirtualReg +takeVirtuals set = mapUniqSet get_virtual + $ filterUniqSet isVirtualReg set + where + get_virtual (RegVirtual vr) = vr + get_virtual _ = panic "getVirt" + -- | Choose a node to spill from this graph chooseSpill