X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmExpr.hs;h=983a232e1704c1a5f0f267f104fb207f01438207;hb=1241c26f3552a2037263769e5ef7fa68d9f3be36;hp=b0a7468ef808b1c2b361b6a37f9ec762fd8bc787;hpb=8b7eaa404043294bd4cb4a0322ac1f7115bad6a0;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmExpr.hs b/compiler/cmm/CmmExpr.hs index b0a7468..983a232 100644 --- a/compiler/cmm/CmmExpr.hs +++ b/compiler/cmm/CmmExpr.hs @@ -1,14 +1,13 @@ -{-# OPTIONS -Wall -fno-warn-name-shadowing #-} module CmmExpr ( CmmExpr(..), cmmExprRep, maybeInvertCmmExpr , CmmReg(..), cmmRegRep , CmmLit(..), cmmLitRep - , LocalReg(..), localRegRep, localRegGCFollow, Kind(..) + , LocalReg(..), localRegRep, localRegGCFollow, GCKind(..) , GlobalReg(..), globalRegRep, spReg, hpReg, spLimReg, nodeReg, node , UserOfLocalRegs, foldRegsUsed , RegSet, emptyRegSet, elemRegSet, extendRegSet, deleteFromRegSet, mkRegSet - , plusRegSet, minusRegSet + , plusRegSet, minusRegSet, timesRegSet ) where @@ -79,13 +78,13 @@ maybeInvertCmmExpr _ = Nothing ----------------------------------------------------------------------------- -- | Whether a 'LocalReg' is a GC followable pointer -data Kind = KindPtr | KindNonPtr deriving (Eq) +data GCKind = GCKindPtr | GCKindNonPtr deriving (Eq) data LocalReg = LocalReg !Unique -- ^ Identifier MachRep -- ^ Type - Kind -- ^ Should the GC follow as a pointer + GCKind -- ^ Should the GC follow as a pointer -- | Sets of local registers @@ -95,7 +94,7 @@ elemRegSet :: LocalReg -> RegSet -> Bool extendRegSet :: RegSet -> LocalReg -> RegSet deleteFromRegSet :: RegSet -> LocalReg -> RegSet mkRegSet :: [LocalReg] -> RegSet -minusRegSet, plusRegSet :: RegSet -> RegSet -> RegSet +minusRegSet, plusRegSet, timesRegSet :: RegSet -> RegSet -> RegSet emptyRegSet = emptyUniqSet elemRegSet = elementOfUniqSet @@ -104,6 +103,7 @@ deleteFromRegSet = delOneFromUniqSet mkRegSet = mkUniqSet minusRegSet = minusUniqSet plusRegSet = unionUniqSets +timesRegSet = intersectUniqSets ----------------------------------------------------------------------------- -- Register-use information for expressions and other types @@ -119,6 +119,9 @@ instance UserOfLocalRegs CmmReg where instance UserOfLocalRegs LocalReg where foldRegsUsed f z r = f z r +instance UserOfLocalRegs RegSet where + foldRegsUsed f = foldUniqSet (flip f) + instance UserOfLocalRegs CmmExpr where foldRegsUsed f z e = expr z e where expr z (CmmLit _) = z @@ -152,7 +155,7 @@ localRegRep :: LocalReg -> MachRep localRegRep (LocalReg _ rep _) = rep -localRegGCFollow :: LocalReg -> Kind +localRegGCFollow :: LocalReg -> GCKind localRegGCFollow (LocalReg _ _ p) = p cmmLitRep :: CmmLit -> MachRep @@ -206,11 +209,7 @@ data GlobalReg -- from platform to platform (see module PositionIndependentCode). | PicBaseReg - deriving( Eq -#ifdef DEBUG - , Show -#endif - ) + deriving( Eq , Show ) -- convenient aliases spReg, hpReg, spLimReg, nodeReg :: CmmReg