If these modules use UniqFM then we get a stack overflow when compiling
modules that use fundeps. I haven't tracked down the actual cause.
21 files changed:
import StaticFlags
import BasicTypes
import VarEnv
import StaticFlags
import BasicTypes
import VarEnv
import Util
import Outputable
\end{code}
import Util
import Outputable
\end{code}
import OccName
import Var
import VarSet
import OccName
import Var
import VarSet
import Unique
import Util
import Maybes
import Unique
import Util
import Maybes
import Id
import IdInfo
import NameSet
import Id
import IdInfo
import NameSet
import Name
import VarSet
import Var
import Name
import VarSet
import Var
import Type
import Var
import VarEnv
import Type
import Var
import VarEnv
import Name hiding (tidyNameOcc)
import OccName
import SrcLoc
import Name hiding (tidyNameOcc)
import OccName
import SrcLoc
import CLabel
import State
import CLabel
import State
import Unique ( Unique, getUnique )
import UniqSupply
import List ( groupBy, sortBy )
import Unique ( Unique, getUnique )
import UniqSupply
import List ( groupBy, sortBy )
import Constants
import FastTypes
import FastBool
import Constants
import FastTypes
import FastBool
+import qualified UniqFM as S
+import LazyUniqFM
#if powerpc_TARGET_ARCH
import Data.Word ( Word8, Word16, Word32 )
#if powerpc_TARGET_ARCH
import Data.Word ( Word8, Word16, Word32 )
{-# INLINE regClass #-}
trivColorable :: RegClass -> UniqSet Reg -> UniqSet Reg -> Bool
{-# 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
= {-# SCC "trivColorable" #-}
let
{-# INLINE isSqueesed #-}
isSqueesed cI cF ufm
= case ufm of
+ 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' #)
-> case isSqueesed cI cF right of
(# s, cI', cF' #)
-> case s of
False -> isSqueesed cI' cF' left
True -> (# True, cI', cF' #)
-> case regClass reg of
RcInteger
-> case cI +# _ILIT(1) of
-> case regClass reg of
RcInteger
-> case cI +# _ILIT(1) of
-> case cF +# _ILIT(1) of
cF' -> (# cF' >=# ALLOCATABLE_REGS_DOUBLE, cI, cF' #)
-> case cF +# _ILIT(1) of
cF' -> (# cF' >=# ALLOCATABLE_REGS_DOUBLE, cI, cF' #)
-> (# False, cI, cF #)
in case isSqueesed (_ILIT(0)) (_ILIT(0)) conflicts of
-> (# False, cI, cF #)
in case isSqueesed (_ILIT(0)) (_ILIT(0)) conflicts of
import UniqSupply
import UniqSet
import UniqSupply
import UniqSet
import Bag
import Outputable
import DynFlags
import Bag
import Outputable
import DynFlags
import Digraph
import Unique ( Uniquable(getUnique), Unique )
import UniqSet
import Digraph
import Unique ( Uniquable(getUnique), Unique )
import UniqSet
import UniqSupply
import Outputable
import State
import UniqSupply
import Outputable
import State
import Cmm
import Outputable
import Cmm
import Outputable
import UniqSet
import State
import UniqSet
import State
import Outputable
import Unique
import UniqSet
import Outputable
import Unique
import UniqSet
import UniqSupply
import Bag
import State
import UniqSupply
import Bag
import State
import MachRegs
import Cmm
import MachRegs
import Cmm
import UniqSet
import Outputable
import State
import UniqSet
import Outputable
import State
import Digraph ( stronglyConnCompR, SCC(..) )
import PrelNames ( buildIdKey, foldrIdKey, runSTRepIdKey, augmentIdKey )
import Unique ( Unique )
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 Util ( mapAndUnzip )
import Outputable
import VarEnv
import TysWiredIn ( unboxedPairDataCon )
import TysPrim ( realWorldStatePrimTy )
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 )
keysUFM, minusUFM, ufmToList, filterUFM )
import Type ( isUnLiftedType, coreEqType, splitTyConApp_maybe )
import Coercion ( coercionKind )
import Outputable
import TcType
import Unique
import Outputable
import TcType
import Unique
-- | A fn to check if a node is trivially colorable
-- | A fn to check if a node is trivially colorable
import GraphPpr
import Unique
import GraphPpr
import Unique
import UniqSet
import Outputable
import UniqSet
import Outputable
import Outputable
import Unique
import UniqSet
import Outputable
import Unique
import UniqSet
import Data.List hiding (union)
import Data.Maybe
import Data.List hiding (union)
import Data.Maybe
import Outputable
import Unique
import UniqSet
import Outputable
import Unique
import UniqSet
import Data.List
import Data.Maybe
import Data.List
import Data.Maybe
\begin{code}
{-# OPTIONS -Wall -fno-warn-name-shadowing -Werror -fallow-undecidable-instances #-}
module LazyUniqFM (
\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
import Unique
#if ! OMIT_NATIVE_CODEGEN
import Unique
#if ! OMIT_NATIVE_CODEGEN
import TysPrim ( intPrimTy )
import Unique
import TysPrim ( intPrimTy )
import Unique
import UniqSet
import Util ( singleton )
import Digraph ( SCC(..), stronglyConnComp )
import UniqSet
import Util ( singleton )
import Digraph ( SCC(..), stronglyConnComp )