module GHC.Cmm.LRegSet (
LRegSet,
LRegKey,
emptyLRegSet,
nullLRegSet,
insertLRegSet,
elemLRegSet,
deleteFromLRegSet,
sizeLRegSet,
plusLRegSet,
elemsLRegSet
) where
import GHC.Prelude
import GHC.Types.Unique
import GHC.Cmm.Expr
import Data.IntSet as IntSet
type LRegSet = IntSet.IntSet
type LRegKey = Int
emptyLRegSet :: LRegSet
emptyLRegSet = IntSet.empty
nullLRegSet :: LRegSet -> Bool
nullLRegSet = IntSet.null
insertLRegSet :: LocalReg -> LRegSet -> LRegSet
insertLRegSet l = IntSet.insert (getKey (getUnique l))
elemLRegSet :: LocalReg -> LRegSet -> Bool
elemLRegSet l = IntSet.member (getKey (getUnique l))
deleteFromLRegSet :: LRegSet -> LocalReg -> LRegSet
deleteFromLRegSet set reg = IntSet.delete (getKey . getUnique $ reg) set
sizeLRegSet :: IntSet -> Int
sizeLRegSet = IntSet.size
plusLRegSet :: IntSet -> IntSet -> IntSet
plusLRegSet = IntSet.union
elemsLRegSet :: IntSet -> [Int]
elemsLRegSet = IntSet.toList