added 'filterRegsUsed' to CmmExpr
authorNorman Ramsey <nr@eecs.harvard.edu>
Mon, 17 Sep 2007 16:16:34 +0000 (16:16 +0000)
committerNorman Ramsey <nr@eecs.harvard.edu>
Mon, 17 Sep 2007 16:16:34 +0000 (16:16 +0000)
compiler/cmm/CmmExpr.hs

index 983a232..1769a01 100644 (file)
@@ -5,7 +5,7 @@ module CmmExpr
     , CmmLit(..), cmmLitRep
     , LocalReg(..), localRegRep, localRegGCFollow, GCKind(..)
     , GlobalReg(..), globalRegRep, spReg, hpReg, spLimReg, nodeReg, node
-    , UserOfLocalRegs, foldRegsUsed
+    , UserOfLocalRegs, foldRegsUsed, filterRegsUsed
     , RegSet, emptyRegSet, elemRegSet, extendRegSet, deleteFromRegSet, mkRegSet
             , plusRegSet, minusRegSet, timesRegSet
     )
@@ -112,6 +112,11 @@ timesRegSet      = intersectUniqSets
 class UserOfLocalRegs a where
   foldRegsUsed :: (b -> LocalReg -> b) -> b -> a -> b
 
+filterRegsUsed :: UserOfLocalRegs e => (LocalReg -> Bool) -> e -> RegSet
+filterRegsUsed p e =
+    foldRegsUsed (\regs r -> if p r then extendRegSet regs r else regs)
+                 emptyRegSet e
+
 instance UserOfLocalRegs CmmReg where
     foldRegsUsed f z (CmmLocal reg) = f z reg
     foldRegsUsed _ z (CmmGlobal _)  = z