import StaticFlags
import BasicTypes
import VarEnv
-import UniqFM
+import LazyUniqFM
import Util
import Outputable
\end{code}
import OccName
import Var
import VarSet
-import UniqFM
+import LazyUniqFM
import Unique
import Util
import Maybes
import Id
import IdInfo
import NameSet
-import UniqFM
+import LazyUniqFM
import Name
import VarSet
import Var
import Type
import Var
import VarEnv
-import UniqFM
+import LazyUniqFM
import Name hiding (tidyNameOcc)
import OccName
import SrcLoc
import CLabel
import State
-import UniqFM
+import LazyUniqFM
import Unique ( Unique, getUnique )
import UniqSupply
import List ( groupBy, sortBy )
import Constants
import FastTypes
import FastBool
-import UniqFM
+import qualified UniqFM as S
+import LazyUniqFM
#if powerpc_TARGET_ARCH
import Data.Word ( Word8, Word16, Word32 )
{-# INLINE regClass #-}
trivColorable :: RegClass -> UniqSet Reg -> UniqSet Reg -> Bool
-trivColorable classN conflicts exclusions
+trivColorable classN (MkUniqFM conflicts) (MkUniqFM exclusions)
= {-# SCC "trivColorable" #-}
let
{-# INLINE isSqueesed #-}
isSqueesed cI cF ufm
= case ufm of
- NodeUFM _ _ left right
+ S.NodeUFM _ _ left right
-> case isSqueesed cI cF right of
(# s, cI', cF' #)
-> case s of
False -> isSqueesed cI' cF' left
True -> (# True, cI', cF' #)
- LeafUFM _ reg
+ S.LeafUFM _ (Lazy reg)
-> case regClass reg of
RcInteger
-> case cI +# _ILIT(1) of
-> case cF +# _ILIT(1) of
cF' -> (# cF' >=# ALLOCATABLE_REGS_DOUBLE, cI, cF' #)
- EmptyUFM
+ S.EmptyUFM
-> (# False, cI, cF #)
in case isSqueesed (_ILIT(0)) (_ILIT(0)) conflicts of
import UniqSupply
import UniqSet
-import UniqFM
+import LazyUniqFM
import Bag
import Outputable
import DynFlags
import Digraph
import Unique ( Uniquable(getUnique), Unique )
import UniqSet
-import UniqFM
+import LazyUniqFM
import UniqSupply
import Outputable
import State
import Cmm
import Outputable
-import UniqFM
+import LazyUniqFM
import UniqSet
import State
import Outputable
import Unique
import UniqSet
-import UniqFM
+import LazyUniqFM
import UniqSupply
import Bag
import State
import MachRegs
import Cmm
-import UniqFM
+import LazyUniqFM
import UniqSet
import Outputable
import State
import Digraph ( stronglyConnCompR, SCC(..) )
import PrelNames ( buildIdKey, foldrIdKey, runSTRepIdKey, augmentIdKey )
import Unique ( Unique )
-import UniqFM ( keysUFM, intersectUFM_C, foldUFM_Directly )
+import LazyUniqFM ( keysUFM, intersectUFM_C, foldUFM_Directly )
import Util ( mapAndUnzip )
import Outputable
import VarEnv
import TysWiredIn ( unboxedPairDataCon )
import TysPrim ( realWorldStatePrimTy )
-import UniqFM ( plusUFM_C, addToUFM_Directly, lookupUFM_Directly,
+import LazyUniqFM ( plusUFM_C, addToUFM_Directly, lookupUFM_Directly,
keysUFM, minusUFM, ufmToList, filterUFM )
import Type ( isUnLiftedType, coreEqType, splitTyConApp_maybe )
import Coercion ( coercionKind )
import Outputable
import TcType
import Unique
-import UniqFM
+import LazyUniqFM
\end{code}
where
import UniqSet
-import UniqFM
+import LazyUniqFM
-- | A fn to check if a node is trivially colorable
import GraphPpr
import Unique
-import UniqFM
+import LazyUniqFM
import UniqSet
import Outputable
import Outputable
import Unique
import UniqSet
-import UniqFM
+import LazyUniqFM
import Data.List hiding (union)
import Data.Maybe
import Outputable
import Unique
import UniqSet
-import UniqFM
+import LazyUniqFM
import Data.List
import Data.Maybe
\begin{code}
{-# OPTIONS -Wall -fno-warn-name-shadowing -Werror -fallow-undecidable-instances #-}
module LazyUniqFM (
- UniqFM, -- abstract type
+ UniqFM(..), -- abstract type
+ -- XXX Not actually abstract because of nativeGen/MachRegs; sigh
+ Lazy(Lazy), -- XXX Also for nativeGen/MachRegs; sigh
emptyUFM,
unitUFM,
) where
import Maybes
-import UniqFM
+import LazyUniqFM
import Unique
#if ! OMIT_NATIVE_CODEGEN
import TysPrim ( intPrimTy )
import Unique
-import UniqFM
+import LazyUniqFM
import UniqSet
import Util ( singleton )
import Digraph ( SCC(..), stronglyConnComp )