X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FnativeGen%2FRegAllocLinear.hs;h=0a0162f1bc1dac6f86e22e31a86ff3e4abc1af84;hb=2922c9ae951271a60db6fd6b2488f9d8111e442e;hp=66ac1bfe1a448443f16c028bc66277c259f27a32;hpb=8db404018f101a182c92cc724a8de08cf5ab10ba;p=ghc-hetmet.git diff --git a/compiler/nativeGen/RegAllocLinear.hs b/compiler/nativeGen/RegAllocLinear.hs index 66ac1bf..0a0162f 100644 --- a/compiler/nativeGen/RegAllocLinear.hs +++ b/compiler/nativeGen/RegAllocLinear.hs @@ -94,7 +94,6 @@ import MachInstrs import RegAllocInfo import RegLiveness import Cmm hiding (RegSet) -import PprMach import Digraph import Unique ( Uniquable(getUnique), Unique ) @@ -104,7 +103,6 @@ import UniqSupply import Outputable import State import FastString -import MonadUtils import Data.Maybe import Data.List @@ -112,8 +110,6 @@ import Control.Monad import Data.Word import Data.Bits -import Debug.Trace - #include "../includes/MachRegs.h" -- ----------------------------------------------------------------------------- @@ -204,11 +200,9 @@ noFreeRegs = FreeRegs 0 0 0 -- Don't treat the top half of reg pairs we're using as doubles as being free. initFreeRegs :: FreeRegs initFreeRegs --- = trace (show allocable ++ "\n" ++ show freeDouble) --- $ regs = regs where - freeDouble = getFreeRegs RcDouble regs +-- freeDouble = getFreeRegs RcDouble regs regs = foldr releaseReg noFreeRegs allocable allocable = allocatableRegs \\ doublePairs doublePairs = [43, 45, 47, 49, 51, 53] @@ -225,15 +219,16 @@ getFreeRegs cls (FreeRegs g f d) go _ 0 _ = [] go x m i | x .&. m /= 0 = i : (go x (m `shiftL` 1) $! i+1) | otherwise = go x (m `shiftL` 1) $! i+1 - +{- showFreeRegs :: FreeRegs -> String showFreeRegs regs = "FreeRegs\n" ++ " integer: " ++ (show $ getFreeRegs RcInteger regs) ++ "\n" ++ " float: " ++ (show $ getFreeRegs RcFloat regs) ++ "\n" ++ " double: " ++ (show $ getFreeRegs RcDouble regs) ++ "\n" +-} - +{- -- | Check whether a reg is free regIsFree :: RegNo -> FreeRegs -> Bool regIsFree r (FreeRegs g f d) @@ -253,7 +248,7 @@ regIsFree r (FreeRegs g f d) | otherwise , mask <- 1 `shiftL` (fromIntegral r - 32) = f .&. mask /= 0 - +-} -- | Grab a register. grabReg :: RegNo -> FreeRegs -> FreeRegs @@ -318,7 +313,7 @@ releaseReg r regs@(FreeRegs g f d) -- | Allocate a register in the map. allocateReg :: RegNo -> FreeRegs -> FreeRegs -allocateReg r regs@(FreeRegs g f d) +allocateReg r regs -- (FreeRegs g f d) -- if the reg isn't actually free then we're in trouble {- | not $ regIsFree r regs @@ -822,7 +817,7 @@ allocateRegsAndSpill reading keep spills alloc (r:rs) = do case getFreeRegs (regClass r) freeregs of -- case (2): we have a free register - freeClass@(my_reg:_) -> {- pprTrace "alloc" (ppr r <+> ppr my_reg <+> ppr freeClass) $ -} + my_reg:_ -> {- pprTrace "alloc" (ppr r <+> ppr my_reg <+> ppr freeClass) $ -} do spills' <- loadTemp reading r loc my_reg spills let new_loc