{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
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 GHC.Word
import GHC.Data.Word64Set as Word64Set
type LRegSet = Word64Set.Word64Set
type LRegKey = Word64
emptyLRegSet :: LRegSet
emptyLRegSet :: LRegSet
emptyLRegSet = LRegSet
Word64Set.empty
nullLRegSet :: LRegSet -> Bool
nullLRegSet :: LRegSet -> Bool
nullLRegSet = LRegSet -> Bool
Word64Set.null
insertLRegSet :: LocalReg -> LRegSet -> LRegSet
insertLRegSet :: LocalReg -> LRegSet -> LRegSet
insertLRegSet LocalReg
l = Key -> LRegSet -> LRegSet
Word64Set.insert (Unique -> Key
getKey (LocalReg -> Unique
forall a. Uniquable a => a -> Unique
getUnique LocalReg
l))
elemLRegSet :: LocalReg -> LRegSet -> Bool
elemLRegSet :: LocalReg -> LRegSet -> Bool
elemLRegSet LocalReg
l = Key -> LRegSet -> Bool
Word64Set.member (Unique -> Key
getKey (LocalReg -> Unique
forall a. Uniquable a => a -> Unique
getUnique LocalReg
l))
deleteFromLRegSet :: LRegSet -> LocalReg -> LRegSet
deleteFromLRegSet :: LRegSet -> LocalReg -> LRegSet
deleteFromLRegSet LRegSet
set LocalReg
reg = Key -> LRegSet -> LRegSet
Word64Set.delete (Unique -> Key
getKey (Unique -> Key) -> (LocalReg -> Unique) -> LocalReg -> Key
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LocalReg -> Unique
forall a. Uniquable a => a -> Unique
getUnique (LocalReg -> Key) -> LocalReg -> Key
forall a b. (a -> b) -> a -> b
$ LocalReg
reg) LRegSet
set
sizeLRegSet :: Word64Set -> Int
sizeLRegSet :: LRegSet -> Int
sizeLRegSet = LRegSet -> Int
Word64Set.size
plusLRegSet :: Word64Set -> Word64Set -> Word64Set
plusLRegSet :: LRegSet -> LRegSet -> LRegSet
plusLRegSet = LRegSet -> LRegSet -> LRegSet
Word64Set.union
elemsLRegSet :: Word64Set -> [Word64]
elemsLRegSet :: LRegSet -> [Key]
elemsLRegSet = LRegSet -> [Key]
Word64Set.toList