ghc-9.6.7: GHC/Cmm/LRegSet.hs
{-# 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
-- Compact sets for membership tests of local variables.
type LRegSet = Word64Set.Word64Set
type LRegKey = Word64
emptyLRegSet :: LRegSet
emptyLRegSet = Word64Set.empty
nullLRegSet :: LRegSet -> Bool
nullLRegSet = Word64Set.null
insertLRegSet :: LocalReg -> LRegSet -> LRegSet
insertLRegSet l = Word64Set.insert (getKey (getUnique l))
elemLRegSet :: LocalReg -> LRegSet -> Bool
elemLRegSet l = Word64Set.member (getKey (getUnique l))
deleteFromLRegSet :: LRegSet -> LocalReg -> LRegSet
deleteFromLRegSet set reg = Word64Set.delete (getKey . getUnique $ reg) set
sizeLRegSet :: Word64Set -> Int
sizeLRegSet = Word64Set.size
plusLRegSet :: Word64Set -> Word64Set -> Word64Set
plusLRegSet = Word64Set.union
elemsLRegSet :: Word64Set -> [Word64]
elemsLRegSet = Word64Set.toList