[Git][ghc/ghc][wip/romes/deterministic-label-map] Use NonDeterministic Label map in multiple passes
Rodrigo Mesquita (@alt-romes)
gitlab at gitlab.haskell.org
Thu Jul 11 10:38:11 UTC 2024
Rodrigo Mesquita pushed to branch wip/romes/deterministic-label-map at Glasgow Haskell Compiler / GHC
Commits:
2d58e77c by Rodrigo Mesquita at 2024-07-11T11:37:48+01:00
Use NonDeterministic Label map in multiple passes
(TODO: More could be available. Look through Det LabelMap uses again)
- - - - -
29 changed files:
- compiler/GHC/Cmm/Dataflow.hs
- compiler/GHC/Cmm/Dataflow/Label.hs
- compiler/GHC/Cmm/Dataflow/Label/NonDet.hs
- compiler/GHC/Cmm/Graph.hs
- compiler/GHC/Cmm/Info/Build.hs
- compiler/GHC/Cmm/LayoutStack.hs
- compiler/GHC/Cmm/Lint.hs
- compiler/GHC/Cmm/Liveness.hs
- compiler/GHC/Cmm/Pipeline.hs
- compiler/GHC/Cmm/ProcPoint.hs
- compiler/GHC/Cmm/Sink.hs
- compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
- compiler/GHC/CmmToAsm/BlockLayout.hs
- compiler/GHC/CmmToAsm/PIC.hs
- compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs
- compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs
- compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs
- compiler/GHC/CmmToAsm/Reg/Linear.hs
- compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs
- compiler/GHC/CmmToAsm/Reg/Liveness.hs
- compiler/GHC/CmmToAsm/Wasm/FromCmm.hs
- compiler/GHC/CmmToAsm/X86/CodeGen.hs
- compiler/GHC/CmmToAsm/X86/Instr.hs
- compiler/GHC/CmmToLlvm/CodeGen.hs
- compiler/GHC/Data/Graph/Collapse.hs
- compiler/GHC/StgToCmm/Heap.hs
- compiler/GHC/StgToCmm/Monad.hs
- compiler/GHC/Types/Unique/DFM.hs
- compiler/ghc.cabal.in
Changes:
=====================================
compiler/GHC/Cmm/Dataflow.hs
=====================================
@@ -43,7 +43,9 @@ import Data.Kind (Type)
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (LabelMap)
+import qualified GHC.Cmm.Dataflow.Label as Det
+import GHC.Cmm.Dataflow.Label.NonDet hiding (LabelMap)
type family Fact (x :: Extensibility) f :: Type
type instance Fact C f = FactBase f
@@ -156,7 +158,7 @@ fixpointAnalysis direction lattice do_block entry blockmap = loop start
-- information in fbase1 and (if something changed) we update it
-- and add the affected blocks to the worklist.
(todo2, fbase2) = {-# SCC "mapFoldWithKey" #-}
- mapFoldlWithKey
+ nonDetMapFoldlWithKey
(updateFact join dep_blocks) (todo1, fbase1) out_facts
in loop todo2 fbase2
loop _ !fbase1 = fbase1
@@ -227,9 +229,9 @@ fixpointRewrite dir lattice do_block entry blockmap = loop start blockmap
let block = block_arr ! index
(new_block, out_facts) <- {-# SCC "do_block_rewrite" #-}
do_block block fbase1
- let blocks2 = mapInsert (entryLabel new_block) new_block blocks1
+ let blocks2 = Det.mapInsert (entryLabel new_block) new_block blocks1
(todo2, fbase2) = {-# SCC "mapFoldWithKey_rewrite" #-}
- mapFoldlWithKey
+ nonDetMapFoldlWithKey
(updateFact join dep_blocks) (todo1, fbase1) out_facts
loop todo2 blocks2 fbase2
loop _ !blocks1 !fbase1 = return (blocks1, fbase1)
@@ -320,16 +322,16 @@ sortBlocks direction entry blockmap =
-- * for a forward analysis, we only need to re-analyze the current block
-- (and that will in turn propagate facts into its successors).
mkDepBlocks :: NonLocal node => Direction -> [Block node C C] -> LabelMap IntSet
-mkDepBlocks Fwd blocks = go blocks 0 mapEmpty
+mkDepBlocks Fwd blocks = go blocks 0 Det.mapEmpty
where
go [] !_ !dep_map = dep_map
go (b:bs) !n !dep_map =
- go bs (n + 1) $ mapInsert (entryLabel b) (IntSet.singleton n) dep_map
-mkDepBlocks Bwd blocks = go blocks 0 mapEmpty
+ go bs (n + 1) $ Det.mapInsert (entryLabel b) (IntSet.singleton n) dep_map
+mkDepBlocks Bwd blocks = go blocks 0 Det.mapEmpty
where
go [] !_ !dep_map = dep_map
go (b:bs) !n !dep_map =
- let insert m l = mapInsertWith IntSet.union l (IntSet.singleton n) m
+ let insert m l = Det.mapInsertWith IntSet.union l (IntSet.singleton n) m
in go bs (n + 1) $ foldl' insert dep_map (successors b)
-- | After some new facts have been generated by analysing a block, we
@@ -353,7 +355,7 @@ updateFact fact_join dep_blocks (todo, fbase) lbl new_fact
(Changed f) -> let !z = mapInsert lbl f fbase in (changed, z)
where
changed = todo `IntSet.union`
- mapFindWithDefault IntSet.empty lbl dep_blocks
+ Det.mapFindWithDefault IntSet.empty lbl dep_blocks
{-
Note [No old fact]
=====================================
compiler/GHC/Cmm/Dataflow/Label.hs
=====================================
@@ -7,11 +7,9 @@
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
module GHC.Cmm.Dataflow.Label
- ( Label
+ ( Label(..)
, LabelMap
, LabelSet
- , FactBase
- , lookupFact
, mkHooplLabel
-- * Set
, setEmpty
@@ -295,10 +293,3 @@ instance TrieMap LabelMap where
foldTM k m z = mapFoldr k z m
filterTM f m = mapFilter f m
------------------------------------------------------------------------------
--- FactBase
-
-type FactBase f = LabelMap f
-
-lookupFact :: Label -> FactBase f -> Maybe f
-lookupFact = mapLookup
=====================================
compiler/GHC/Cmm/Dataflow/Label/NonDet.hs
=====================================
@@ -39,10 +39,10 @@ module GHC.Cmm.Dataflow.Label.NonDet
, setIntersection
, setIsSubsetOf
, setFilter
- , setFoldl
- , setFoldr
, setFromList
- , setElems
+ , nonDetSetFoldl
+ , nonDetSetFoldr
+ , nonDetSetElems
-- * Map
, mapNull
, mapSize
@@ -64,25 +64,23 @@ module GHC.Cmm.Dataflow.Label.NonDet
, mapIsSubmapOf
, mapMap
, mapMapWithKey
- , mapFoldl
- , mapFoldr
- , mapFoldlWithKey
- , mapFoldMapWithKey
, mapFilter
, mapFilterWithKey
- , mapElems
- , mapKeys
- , mapToList
, mapFromList
, mapFromListWith
+ , nonDetMapElems
+ , nonDetMapFoldl
+ , nonDetMapFoldr
+ , nonDetMapFoldlWithKey
+ , nonDetMapFoldMapWithKey
+ , nonDetMapKeys
+ , nonDetMapToList
) where
import GHC.Prelude
import GHC.Utils.Outputable
-import GHC.Types.Unique (Uniquable(..), mkUniqueGrimily)
-
-- The code generator will eventually be using all the labels stored in a
-- LabelSet and LabelMap. For these reasons we use the strict variants of these
-- data structures. We inline selectively to enable the RULES in Word64Map/Set
@@ -91,33 +89,10 @@ import GHC.Data.Word64Set (Word64Set)
import qualified GHC.Data.Word64Set as S
import GHC.Data.Word64Map.Strict (Word64Map)
import qualified GHC.Data.Word64Map.Strict as M
-import GHC.Data.TrieMap
-import Data.Word (Word64)
import Data.List (foldl1')
-
------------------------------------------------------------------------------
--- Label
------------------------------------------------------------------------------
-
-newtype Label = Label { lblToUnique :: Word64 }
- deriving newtype (Eq, Ord)
-
-mkHooplLabel :: Word64 -> Label
-mkHooplLabel = Label
-
-instance Show Label where
- show (Label n) = "L" ++ show n
-
-instance Uniquable Label where
- getUnique label = mkUniqueGrimily (lblToUnique label)
-
-instance Outputable Label where
- ppr label = ppr (getUnique label)
-
-instance OutputableP env Label where
- pdoc _ l = ppr l
+import GHC.Cmm.Dataflow.Label (Label(..), mkHooplLabel)
-----------------------------------------------------------------------------
-- LabelSet
@@ -166,28 +141,27 @@ setIsSubsetOf (LS x) (LS y) = S.isSubsetOf x y
setFilter :: (Label -> Bool) -> LabelSet -> LabelSet
setFilter f (LS s) = LS (S.filter (f . mkHooplLabel) s)
-{-# INLINE setFoldl #-}
-setFoldl :: (t -> Label -> t) -> t -> LabelSet -> t
-setFoldl k z (LS s) = S.foldl (\a v -> k a (mkHooplLabel v)) z s
-
-{-# INLINE setFoldr #-}
-setFoldr :: (Label -> t -> t) -> t -> LabelSet -> t
-setFoldr k z (LS s) = S.foldr (\v a -> k (mkHooplLabel v) a) z s
-
-{-# INLINE setElems #-}
-setElems :: LabelSet -> [Label]
-setElems (LS s) = map mkHooplLabel (S.elems s)
-
{-# INLINE setFromList #-}
setFromList :: [Label] -> LabelSet
setFromList ks = LS (S.fromList (map lblToUnique ks))
+{-# INLINE nonDetSetFoldl #-}
+nonDetSetFoldl :: (t -> Label -> t) -> t -> LabelSet -> t
+nonDetSetFoldl k z (LS s) = S.foldl (\a v -> k a (mkHooplLabel v)) z s
+
+{-# INLINE nonDetSetFoldr #-}
+nonDetSetFoldr :: (Label -> t -> t) -> t -> LabelSet -> t
+nonDetSetFoldr k z (LS s) = S.foldr (\v a -> k (mkHooplLabel v) a) z s
+
+{-# INLINE nonDetSetElems #-}
+nonDetSetElems :: LabelSet -> [Label]
+nonDetSetElems (LS s) = map mkHooplLabel (S.elems s)
+
-----------------------------------------------------------------------------
-- LabelMap
newtype LabelMap v = LM (Word64Map v)
- deriving newtype (Eq, Ord, Show, Functor, Foldable)
- deriving stock Traversable
+ deriving newtype (Eq, Ord, Show, Functor)
mapNull :: LabelMap a -> Bool
mapNull (LM m) = M.null m
@@ -252,21 +226,6 @@ mapMap f (LM m) = LM (M.map f m)
mapMapWithKey :: (Label -> a -> v) -> LabelMap a -> LabelMap v
mapMapWithKey f (LM m) = LM (M.mapWithKey (f . mkHooplLabel) m)
-{-# INLINE mapFoldl #-}
-mapFoldl :: (a -> b -> a) -> a -> LabelMap b -> a
-mapFoldl k z (LM m) = M.foldl k z m
-
-{-# INLINE mapFoldr #-}
-mapFoldr :: (a -> b -> b) -> b -> LabelMap a -> b
-mapFoldr k z (LM m) = M.foldr k z m
-
-{-# INLINE mapFoldlWithKey #-}
-mapFoldlWithKey :: (t -> Label -> b -> t) -> t -> LabelMap b -> t
-mapFoldlWithKey k z (LM m) = M.foldlWithKey (\a v -> k a (mkHooplLabel v)) z m
-
-mapFoldMapWithKey :: Monoid m => (Label -> t -> m) -> LabelMap t -> m
-mapFoldMapWithKey f (LM m) = M.foldMapWithKey (\k v -> f (mkHooplLabel k) v) m
-
{-# INLINEABLE mapFilter #-}
mapFilter :: (v -> Bool) -> LabelMap v -> LabelMap v
mapFilter f (LM m) = LM (M.filter f m)
@@ -275,18 +234,6 @@ mapFilter f (LM m) = LM (M.filter f m)
mapFilterWithKey :: (Label -> v -> Bool) -> LabelMap v -> LabelMap v
mapFilterWithKey f (LM m) = LM (M.filterWithKey (f . mkHooplLabel) m)
-{-# INLINE mapElems #-}
-mapElems :: LabelMap a -> [a]
-mapElems (LM m) = M.elems m
-
-{-# INLINE mapKeys #-}
-mapKeys :: LabelMap a -> [Label]
-mapKeys (LM m) = map (mkHooplLabel . fst) (M.toList m)
-
-{-# INLINE mapToList #-}
-mapToList :: LabelMap b -> [(Label, b)]
-mapToList (LM m) = [(mkHooplLabel k, v) | (k, v) <- M.toList m]
-
{-# INLINE mapFromList #-}
mapFromList :: [(Label, v)] -> LabelMap v
mapFromList assocs = LM (M.fromList [(lblToUnique k, v) | (k, v) <- assocs])
@@ -294,25 +241,52 @@ mapFromList assocs = LM (M.fromList [(lblToUnique k, v) | (k, v) <- assocs])
mapFromListWith :: (v -> v -> v) -> [(Label, v)] -> LabelMap v
mapFromListWith f assocs = LM (M.fromListWith f [(lblToUnique k, v) | (k, v) <- assocs])
+{-# INLINE nonDetMapElems #-}
+nonDetMapElems :: LabelMap a -> [a]
+nonDetMapElems (LM m) = M.elems m
+
+{-# INLINE nonDetMapFoldl #-}
+nonDetMapFoldl :: (a -> b -> a) -> a -> LabelMap b -> a
+nonDetMapFoldl k z (LM m) = M.foldl k z m
+
+{-# INLINE nonDetMapFoldr #-}
+nonDetMapFoldr :: (a -> b -> b) -> b -> LabelMap a -> b
+nonDetMapFoldr k z (LM m) = M.foldr k z m
+
+{-# INLINE nonDetMapFoldlWithKey #-}
+nonDetMapFoldlWithKey :: (t -> Label -> b -> t) -> t -> LabelMap b -> t
+nonDetMapFoldlWithKey k z (LM m) = M.foldlWithKey (\a v -> k a (mkHooplLabel v)) z m
+
+nonDetMapFoldMapWithKey :: Monoid m => (Label -> t -> m) -> LabelMap t -> m
+nonDetMapFoldMapWithKey f (LM m) = M.foldMapWithKey (\k v -> f (mkHooplLabel k) v) m
+
+{-# INLINE nonDetMapKeys #-}
+nonDetMapKeys :: LabelMap a -> [Label]
+nonDetMapKeys (LM m) = map (mkHooplLabel . fst) (M.toList m)
+
+{-# INLINE nonDetMapToList #-}
+nonDetMapToList :: LabelMap b -> [(Label, b)]
+nonDetMapToList (LM m) = [(mkHooplLabel k, v) | (k, v) <- M.toList m]
+
-----------------------------------------------------------------------------
-- Instances
instance Outputable LabelSet where
- ppr = ppr . setElems
+ ppr = ppr . nonDetSetElems
instance Outputable a => Outputable (LabelMap a) where
- ppr = ppr . mapToList
+ ppr = ppr . nonDetMapToList
instance OutputableP env a => OutputableP env (LabelMap a) where
- pdoc env = pdoc env . mapToList
-
-instance TrieMap LabelMap where
- type Key LabelMap = Label
- emptyTM = mapEmpty
- lookupTM k m = mapLookup k m
- alterTM k f m = mapAlter f k m
- foldTM k m z = mapFoldr k z m
- filterTM f m = mapFilter f m
+ pdoc env = pdoc env . nonDetMapToList
+
+-- instance TrieMap LabelMap where
+-- type Key LabelMap = Label
+-- emptyTM = mapEmpty
+-- lookupTM k m = mapLookup k m
+-- alterTM k f m = mapAlter f k m
+-- foldTM k m z = mapFoldr k z m -- TODO:ERROR?
+-- filterTM f m = mapFilter f m
-----------------------------------------------------------------------------
-- FactBase
=====================================
compiler/GHC/Cmm/Graph.hs
=====================================
@@ -32,7 +32,7 @@ import GHC.Cmm.Switch (SwitchTargets)
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Data.FastString
import GHC.Types.ForeignCall
import GHC.Data.OrdList
=====================================
compiler/GHC/Cmm/Info/Build.hs
=====================================
@@ -23,6 +23,8 @@ import GHC.Cmm.Config
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet (lookupFact)
+import qualified GHC.Cmm.Dataflow.Label.NonDet as NonDet
import GHC.Cmm.Dataflow
import GHC.Unit.Module
import GHC.Data.Graph.Directed
@@ -532,7 +534,7 @@ newtype CAFfyLabel = CAFfyLabel CLabel
deriving newtype instance OutputableP env CLabel => OutputableP env CAFfyLabel
type CAFSet = Set CAFfyLabel
-type CAFEnv = LabelMap CAFSet
+type CAFEnv = NonDet.LabelMap CAFSet
-- | Records the CAFfy references of a set of static data decls.
type DataCAFEnv = Map CLabel CAFSet
@@ -599,7 +601,7 @@ cafAnal
-> CAFEnv
cafAnal platform contLbls topLbl cmmGraph =
analyzeCmmBwd cafLattice
- (cafTransfers platform contLbls (g_entry cmmGraph) topLbl) cmmGraph mapEmpty
+ (cafTransfers platform contLbls (g_entry cmmGraph) topLbl) cmmGraph NonDet.mapEmpty
cafLattice :: DataflowLattice CAFSet
@@ -659,7 +661,7 @@ cafTransfers platform contLbls entry topLbl
text "topLbl:" <+> pdoc platform topLbl $$
text "cafs in exit:" <+> pdoc platform joined $$
text "result:" <+> pdoc platform result) $
- mapSingleton (entryLabel eNode) result
+ NonDet.mapSingleton (entryLabel eNode) result
-- -----------------------------------------------------------------------------
@@ -775,7 +777,7 @@ depAnalSRTs platform cafEnv cafEnv_static decls =
| (l, lbl) <- labelledBlocks
, Just (cafs :: Set CAFfyLabel) <-
[case l of
- BlockLabel l -> mapLookup l cafEnv
+ BlockLabel l -> NonDet.mapLookup l cafEnv
DeclLabel cl -> Map.lookup cl cafEnv_static]
, let cafs' = Set.delete lbl cafs
]
@@ -810,7 +812,7 @@ getCAFs platform cafEnv = mapMaybe getCAFLabel
| Just info <- mapLookup (g_entry g) (info_tbls top_info)
, let rep = cit_rep info
, isStaticRep rep && isThunkRep rep
- , Just cafs <- mapLookup (g_entry g) cafEnv
+ , Just cafs <- NonDet.mapLookup (g_entry g) cafEnv
= Just (Just (g_entry g), mkCAFfyLabel platform top_lbl, cafs)
| otherwise
@@ -902,7 +904,7 @@ doSRTs cfg moduleSRTInfo procs data_ = do
CmmStaticsRaw lbl _ -> (lbl, set)
(proc_envs, procss) = unzip procs
- cafEnv = mapUnions proc_envs
+ cafEnv = NonDet.mapUnions proc_envs
decls = map (cmmDataDeclCmmDecl . snd) data_ ++ concat procss
staticFuns = mapFromList (getStaticFuns decls)
=====================================
compiler/GHC/Cmm/LayoutStack.hs
=====================================
@@ -1,4 +1,5 @@
{-# LANGUAGE RecordWildCards, GADTs #-}
+{-# OPTIONS_GHC -ddump-simpl -ddump-stg-final -ddump-to-file -dumpdir=/var/folders/tv/35hlch6s3y15hfvndc71l6d40000gn/T/tmp.bJv7ldTSvf #-}
module GHC.Cmm.LayoutStack (
cmmLayoutStack, setInfoTableStackMap
) where
@@ -26,6 +27,7 @@ import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
import GHC.Cmm.Dataflow.Label
import GHC.Types.Unique.Supply
+import qualified GHC.Cmm.Dataflow.Label.NonDet as NonDet
import GHC.Data.Maybe
import GHC.Types.Unique.FM
import GHC.Utils.Misc
@@ -235,7 +237,7 @@ instance Outputable StackMap where
cmmLayoutStack :: CmmConfig -> ProcPointSet -> ByteOff -> CmmGraph
- -> UniqSM (CmmGraph, LabelMap StackMap)
+ -> UniqSM (CmmGraph, NonDet.LabelMap StackMap)
cmmLayoutStack cfg procpoints entry_args
graph@(CmmGraph { g_entry = entry })
= do
@@ -262,17 +264,17 @@ cmmLayoutStack cfg procpoints entry_args
layout :: CmmConfig
-> LabelSet -- proc points
- -> LabelMap CmmLocalLive -- liveness
+ -> NonDet.LabelMap CmmLocalLive -- liveness
-> BlockId -- entry
-> ByteOff -- stack args on entry
- -> LabelMap StackMap -- [final] stack maps
+ -> NonDet.LabelMap StackMap -- [final] stack maps
-> ByteOff -- [final] Sp high water mark
-> [CmmBlock] -- [in] blocks
-> UniqSM
- ( LabelMap StackMap -- [out] stack maps
+ ( NonDet.LabelMap StackMap -- [out] stack maps
, ByteOff -- [out] Sp high water mark
, [CmmBlock] -- [out] new blocks
)
@@ -282,12 +284,18 @@ layout cfg procpoints liveness entry entry_args final_stackmaps final_sp_high bl
where
(updfr, cont_info) = collectContInfo blocks
- init_stackmap = mapSingleton entry StackMap{ sm_sp = entry_args
- , sm_args = entry_args
- , sm_ret_off = updfr
- , sm_regs = emptyUFM
- }
-
+ init_stackmap = NonDet.mapSingleton entry
+ StackMap{ sm_sp = entry_args
+ , sm_args = entry_args
+ , sm_ret_off = updfr
+ , sm_regs = emptyUFM
+ }
+
+ go :: [Block CmmNode C C]
+ -> NonDet.LabelMap StackMap
+ -> StackLoc
+ -> [CmmBlock]
+ -> UniqSM (NonDet.LabelMap StackMap, StackLoc, [CmmBlock])
go [] acc_stackmaps acc_hwm acc_blocks
= return (acc_stackmaps, acc_hwm, acc_blocks)
@@ -296,7 +304,7 @@ layout cfg procpoints liveness entry entry_args final_stackmaps final_sp_high bl
let (entry0@(CmmEntry entry_lbl tscope), middle0, last0) = blockSplit b0
let stack0 at StackMap { sm_sp = sp0 }
- = mapFindWithDefault
+ = NonDet.mapFindWithDefault
(pprPanic "no stack map for" (ppr entry_lbl))
entry_lbl acc_stackmaps
@@ -328,7 +336,7 @@ layout cfg procpoints liveness entry entry_args final_stackmaps final_sp_high bl
manifestSp cfg final_stackmaps stack0 sp0 final_sp_high
entry0 middle_pre sp_off last1 fixup_blocks
- let acc_stackmaps' = mapUnion acc_stackmaps out
+ let acc_stackmaps' = NonDet.mapUnion acc_stackmaps out
-- If this block jumps to the GC, then we do not take its
-- stack usage into account for the high-water mark.
@@ -340,7 +348,7 @@ layout cfg procpoints liveness entry entry_args final_stackmaps final_sp_high bl
this_sp_hwm | isGcJump last0 = 0
| otherwise = sp0 - sp_off
- hwm' = maximum (acc_hwm : this_sp_hwm : map sm_sp (mapElems out))
+ hwm' = maximum (acc_hwm : this_sp_hwm : map sm_sp (NonDet.nonDetMapElems out))
go bs acc_stackmaps' hwm' (final_blocks ++ acc_blocks)
@@ -393,7 +401,7 @@ collectContInfo blocks
-- on the stack and need to be immediately saved across a call, we
-- want to just leave them where they are on the stack.
--
-procMiddle :: LabelMap StackMap -> CmmNode e x -> StackMap -> StackMap
+procMiddle :: NonDet.LabelMap StackMap -> CmmNode e x -> StackMap -> StackMap
procMiddle stackmaps node sm
= case node of
CmmAssign (CmmLocal r) (CmmLoad (CmmStackSlot area off) _ _)
@@ -404,10 +412,10 @@ procMiddle stackmaps node sm
_other
-> sm
-getStackLoc :: Area -> ByteOff -> LabelMap StackMap -> StackLoc
+getStackLoc :: Area -> ByteOff -> NonDet.LabelMap StackMap -> StackLoc
getStackLoc Old n _ = n
getStackLoc (Young l) n stackmaps =
- case mapLookup l stackmaps of
+ case NonDet.mapLookup l stackmaps of
Nothing -> pprPanic "getStackLoc" (ppr l)
Just sm -> sm_sp sm - sm_args sm + n
@@ -432,8 +440,8 @@ getStackLoc (Young l) n stackmaps =
-- extra code that goes *after* the Sp adjustment.
handleLastNode
- :: CmmConfig -> ProcPointSet -> LabelMap CmmLocalLive -> LabelMap ByteOff
- -> LabelMap StackMap -> StackMap -> CmmTickScope
+ :: CmmConfig -> ProcPointSet -> NonDet.LabelMap CmmLocalLive -> LabelMap ByteOff
+ -> NonDet.LabelMap StackMap -> StackMap -> CmmTickScope
-> Block CmmNode O O
-> CmmNode O C
-> UniqSM
@@ -441,7 +449,7 @@ handleLastNode
, ByteOff -- amount to adjust Sp
, CmmNode O C -- new last node
, [CmmBlock] -- new blocks
- , LabelMap StackMap -- stackmaps for the continuations
+ , NonDet.LabelMap StackMap -- stackmaps for the continuations
)
handleLastNode cfg procpoints liveness cont_info stackmaps
@@ -452,7 +460,7 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
-- is cml_args, after popping any other junk from the stack.
CmmCall{ cml_cont = Nothing, .. } -> do
let sp_off = sp0 - cml_args
- return ([], sp_off, last, [], mapEmpty)
+ return ([], sp_off, last, [], NonDet.mapEmpty)
-- At each CmmCall with a continuation:
CmmCall{ cml_cont = Just cont_lbl, .. } ->
@@ -473,20 +481,20 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
, ByteOff
, CmmNode O C
, [CmmBlock]
- , LabelMap StackMap
+ , NonDet.LabelMap StackMap
)
lastCall lbl cml_args cml_ret_args cml_ret_off
= ( assignments
, spOffsetForCall sp0 cont_stack cml_args
, last
, [] -- no new blocks
- , mapSingleton lbl cont_stack )
+ , NonDet.mapSingleton lbl cont_stack )
where
(assignments, cont_stack) = prepareStack lbl cml_ret_args cml_ret_off
prepareStack lbl cml_ret_args cml_ret_off
- | Just cont_stack <- mapLookup lbl stackmaps
+ | Just cont_stack <- NonDet.mapLookup lbl stackmaps
-- If we have already seen this continuation before, then
-- we just have to make the stack look the same:
= (fixupStack stack0 cont_stack, cont_stack)
@@ -506,7 +514,7 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
, ByteOff
, CmmNode O C
, [CmmBlock]
- , LabelMap StackMap )
+ , NonDet.LabelMap StackMap )
handleBranches
-- See Note [diamond proc point]
@@ -515,8 +523,9 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
= do
let cont_args = mapFindWithDefault 0 l cont_info
(assigs, cont_stack) = prepareStack l cont_args (sm_ret_off stack0)
- out = mapFromList [ (l', cont_stack)
- | l' <- successors last ]
+ out = NonDet.mapFromList
+ [ (l', cont_stack)
+ | l' <- successors last ]
return ( assigs
, spOffsetForCall sp0 cont_stack (platformWordSizeInBytes platform)
, last
@@ -532,7 +541,7 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
, 0
, mapSuccessors fix_lbl last
, concat [ blk | (_,_,_,blk) <- pps ]
- , mapFromList [ (l, sm) | (l,_,sm,_) <- pps ] )
+ , NonDet.mapFromList [ (l, sm) | (l,_,sm,_) <- pps ] )
-- For each successor of this block
handleBranch :: BlockId -> UniqSM (BlockId, BlockId, StackMap, [CmmBlock])
@@ -540,7 +549,7 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
-- (a) if the successor already has a stackmap, we need to
-- shuffle the current stack to make it look the same.
-- We have to insert a new block to make this happen.
- | Just stack2 <- mapLookup l stackmaps
+ | Just stack2 <- NonDet.mapLookup l stackmaps
= do
let assigs = fixupStack stack0 stack2
(tmp_lbl, block) <- makeFixupBlock cfg sp0 l stack2 tscp assigs
@@ -563,7 +572,7 @@ handleLastNode cfg procpoints liveness cont_info stackmaps
-- the destination, because this StackMap might be used
-- by fixupStack if this is a join point.
| otherwise = return (l, l, stack1, [])
- where live = mapFindWithDefault (panic "handleBranch") l liveness
+ where live = NonDet.mapFindWithDefault (panic "handleBranch") l liveness
stack1 = stack0 { sm_regs = filterUFM is_live (sm_regs stack0) }
is_live (r,_) = r `elemRegSet` live
@@ -612,7 +621,7 @@ fixupStack old_stack new_stack = concatMap move new_locs
setupStackFrame
:: Platform
-> BlockId -- label of continuation
- -> LabelMap CmmLocalLive -- liveness
+ -> NonDet.LabelMap CmmLocalLive -- liveness
-> ByteOff -- updfr
-> ByteOff -- bytes of return values on stack
-> StackMap -- current StackMap
@@ -622,7 +631,7 @@ setupStackFrame platform lbl liveness updfr_off ret_args stack0
= (cont_stack, assignments)
where
-- get the set of LocalRegs live in the continuation
- live = mapFindWithDefault Set.empty lbl liveness
+ live = NonDet.mapFindWithDefault Set.empty lbl liveness
-- the stack from the base to updfr_off is off-limits.
-- our new stack frame contains:
@@ -824,7 +833,7 @@ allocate platform ret_off live stackmap at StackMap{ sm_sp = sp0
--
manifestSp
:: CmmConfig
- -> LabelMap StackMap -- StackMaps for other blocks
+ -> NonDet.LabelMap StackMap -- StackMaps for other blocks
-> StackMap -- StackMap for this block
-> ByteOff -- Sp on entry to the block
-> ByteOff -- SpHigh
@@ -857,10 +866,10 @@ manifestSp cfg stackmaps stack0 sp0 sp_high
fixup_blocks' = map (mapBlock3' (id, adj_post_sp, id)) fixup_blocks
-getAreaOff :: LabelMap StackMap -> (Area -> StackLoc)
+getAreaOff :: NonDet.LabelMap StackMap -> (Area -> StackLoc)
getAreaOff _ Old = 0
getAreaOff stackmaps (Young l) =
- case mapLookup l stackmaps of
+ case NonDet.mapLookup l stackmaps of
Just sm -> sm_sp sm - sm_args sm
Nothing -> pprPanic "getAreaOff" (ppr l)
@@ -987,7 +996,7 @@ optStackCheck n = -- Note [Always false stack check]
-- StackMap will invalidate its mapping there.
--
elimStackStores :: StackMap
- -> LabelMap StackMap
+ -> NonDet.LabelMap StackMap
-> (Area -> ByteOff)
-> [CmmNode O O]
-> [CmmNode O O]
@@ -1009,7 +1018,7 @@ elimStackStores stackmap stackmaps area_off nodes
-- Update info tables to include stack liveness
-setInfoTableStackMap :: Platform -> LabelMap StackMap -> CmmDecl -> CmmDecl
+setInfoTableStackMap :: Platform -> NonDet.LabelMap StackMap -> CmmDecl -> CmmDecl
setInfoTableStackMap platform stackmaps (CmmProc top_info at TopInfo{..} l v g)
= CmmProc top_info{ info_tbls = mapMapWithKey fix_info info_tbls } l v g
where
@@ -1019,7 +1028,7 @@ setInfoTableStackMap platform stackmaps (CmmProc top_info at TopInfo{..} l v g)
get_liveness :: BlockId -> Liveness
get_liveness lbl
- = case mapLookup lbl stackmaps of
+ = case NonDet.mapLookup lbl stackmaps of
Nothing -> pprPanic "setInfoTableStackMap" (ppr lbl <+> pdoc platform info_tbls)
Just sm -> stackMapToLiveness platform sm
@@ -1044,18 +1053,18 @@ stackMapToLiveness platform StackMap{..} =
insertReloadsAsNeeded
:: Platform
-> ProcPointSet
- -> LabelMap StackMap
+ -> NonDet.LabelMap StackMap
-> BlockId
-> [CmmBlock]
-> UniqSM [CmmBlock]
insertReloadsAsNeeded platform procpoints final_stackmaps entry blocks =
toBlockList . fst <$>
- rewriteCmmBwd liveLattice rewriteCC (ofBlockList entry blocks) mapEmpty
+ rewriteCmmBwd liveLattice rewriteCC (ofBlockList entry blocks) NonDet.mapEmpty
where
rewriteCC :: RewriteFun CmmLocalLive
rewriteCC (BlockCC e_node middle0 x_node) fact_base0 = do
let entry_label = entryLabel e_node
- stackmap = case mapLookup entry_label final_stackmaps of
+ stackmap = case NonDet.mapLookup entry_label final_stackmaps of
Just sm -> sm
Nothing -> panic "insertReloadsAsNeeded: rewriteCC: stackmap"
@@ -1077,7 +1086,7 @@ insertReloadsAsNeeded platform procpoints final_stackmaps entry blocks =
= (middle0, live_at_middle0)
-- Final liveness for this block.
- !fact_base2 = mapSingleton entry_label live_with_reloads
+ !fact_base2 = NonDet.mapSingleton entry_label live_with_reloads
return (BlockCC e_node middle1 x_node, fact_base2)
=====================================
compiler/GHC/Cmm/Lint.hs
=====================================
@@ -19,7 +19,7 @@ import GHC.Platform
import GHC.Platform.Regs (callerSaves)
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Cmm
import GHC.Cmm.Liveness
import GHC.Cmm.Switch (switchTargetsToList)
=====================================
compiler/GHC/Cmm/Liveness.hs
=====================================
@@ -19,7 +19,7 @@ import GHC.Cmm.BlockId
import GHC.Cmm
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Cmm.LRegSet
import GHC.Data.Maybe
@@ -57,7 +57,7 @@ cmmLocalLiveness platform graph =
where
entry = g_entry graph
check facts =
- noLiveOnEntry entry (expectJust "check" $ mapLookup entry facts) facts
+ noLiveOnEntry entry (expectJust "check" $ lookupFact entry facts) facts
cmmGlobalLiveness :: Platform -> CmmGraph -> BlockEntryLiveness GlobalReg
cmmGlobalLiveness platform graph =
@@ -120,7 +120,7 @@ cmmLocalLivenessL platform graph =
where
entry = g_entry graph
check facts =
- noLiveOnEntryL entry (expectJust "check" $ mapLookup entry facts) facts
+ noLiveOnEntryL entry (expectJust "check" $ lookupFact entry facts) facts
-- | On entry to the procedure, there had better not be any LocalReg's live-in.
noLiveOnEntryL :: BlockId -> LRegSet -> a -> a
=====================================
compiler/GHC/Cmm/Pipeline.hs
=====================================
@@ -11,7 +11,7 @@ import GHC.Cmm
import GHC.Cmm.Config
import GHC.Cmm.ContFlowOpt
import GHC.Cmm.CommonBlockElim
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Cmm.Info.Build
import GHC.Cmm.Lint
import GHC.Cmm.LayoutStack
=====================================
compiler/GHC/Cmm/ProcPoint.hs
=====================================
@@ -29,6 +29,7 @@ import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow
import GHC.Cmm.Dataflow.Graph
import GHC.Cmm.Dataflow.Label
+import qualified GHC.Cmm.Dataflow.Label.NonDet as NonDet
-- Compute a minimal set of proc points for a control-flow graph.
@@ -134,7 +135,7 @@ instance Outputable Status where
-- Once you know what the proc-points are, figure out
-- what proc-points each block is reachable from
-- See Note [Proc-point analysis]
-procPointAnalysis :: ProcPointSet -> CmmGraph -> LabelMap Status
+procPointAnalysis :: ProcPointSet -> CmmGraph -> NonDet.LabelMap Status
procPointAnalysis procPoints cmmGraph@(CmmGraph {g_graph = graph}) =
analyzeCmmFwd procPointLattice procPointTransfer cmmGraph initProcPoints
where
@@ -196,14 +197,14 @@ extendPPSet
extendPPSet platform g blocks procPoints =
let env = procPointAnalysis procPoints g
add pps block = let id = entryLabel block
- in case mapLookup id env of
+ in case NonDet.mapLookup id env of
Just ProcPoint -> setInsert id pps
_ -> pps
procPoints' = foldlGraphBlocks add setEmpty g
newPoints = mapMaybe ppSuccessor blocks
newPoint = listToMaybe newPoints
ppSuccessor b =
- let nreached id = case mapLookup id env `orElse`
+ let nreached id = case NonDet.mapLookup id env `orElse`
pprPanic "no ppt" (ppr id <+> pdoc platform b) of
ProcPoint -> 1
ReachedBy ps -> setSize ps
@@ -235,7 +236,7 @@ extendPPSet platform g blocks procPoints =
-- Input invariant: A block should only be reachable from a single ProcPoint.
-- ToDo: use the _ret naming convention that the old code generator
-- used. -- EZY
-splitAtProcPoints :: Platform -> CLabel -> ProcPointSet-> ProcPointSet -> LabelMap Status -> CmmDecl
+splitAtProcPoints :: Platform -> CLabel -> ProcPointSet-> ProcPointSet -> NonDet.LabelMap Status -> CmmDecl
-> UniqSM [CmmDecl]
splitAtProcPoints _ _ _ _ _ t@(CmmData _ _) = return [t]
splitAtProcPoints platform entry_label callPPs procPoints procMap cmmProc = do
@@ -249,7 +250,7 @@ splitAtProcPoints platform entry_label callPPs procPoints procMap cmmProc = do
let add_block :: LabelMap (LabelMap CmmBlock) -> CmmBlock -> LabelMap (LabelMap CmmBlock)
add_block graphEnv b =
- case mapLookup bid procMap of
+ case NonDet.mapLookup bid procMap of
Just ProcPoint -> add graphEnv bid bid b
Just (ReachedBy set) ->
case setElems set of
@@ -263,7 +264,7 @@ splitAtProcPoints platform entry_label callPPs procPoints procMap cmmProc = do
let liveness = cmmGlobalLiveness platform g
let ppLiveness pp = filter isArgReg $ regSetToList $
- expectJust "ppLiveness" $ mapLookup pp liveness
+ expectJust "ppLiveness" $ NonDet.mapLookup pp liveness
graphEnv <- return $ foldlGraphBlocks add_block mapEmpty g
-- Build a map from proc point BlockId to pairs of:
=====================================
compiler/GHC/Cmm/Sink.hs
=====================================
@@ -14,7 +14,7 @@ import GHC.Cmm.Liveness
import GHC.Cmm.LRegSet
import GHC.Cmm.Utils
import GHC.Cmm.Dataflow.Block
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Cmm.Dataflow.Graph
import GHC.Platform.Regs
=====================================
compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
=====================================
@@ -40,7 +40,7 @@ import GHC.Cmm.Utils
import GHC.Cmm.Switch
import GHC.Cmm.CLabel
import GHC.Cmm.Dataflow.Block
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (LabelMap, mapEmpty, mapLookup, mapInsert)
import GHC.Cmm.Dataflow.Graph
import GHC.Types.Tickish ( GenTickish(..) )
import GHC.Types.SrcLoc ( srcSpanFile, srcSpanStartLine, srcSpanStartCol )
=====================================
compiler/GHC/CmmToAsm/BlockLayout.hs
=====================================
@@ -26,7 +26,8 @@ import GHC.CmmToAsm.Config
import GHC.Cmm
import GHC.Cmm.BlockId
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (LabelMap, mapMember, mapLookup, mapElems, mapKeys, mapEmpty, mapInsert, mapDelete, mapFromList, mapMap)
+import GHC.Cmm.Dataflow.Label.NonDet (LabelSet, setEmpty, setMember, setFromList, setInsert)
import GHC.Types.Unique.FM
=====================================
compiler/GHC/CmmToAsm/PIC.hs
=====================================
@@ -60,7 +60,7 @@ import GHC.CmmToAsm.Config
import GHC.CmmToAsm.Types
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapMember)
import GHC.Cmm
import GHC.Cmm.CLabel
import GHC.Cmm.Utils (cmmLoadBWord)
=====================================
compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs
=====================================
@@ -15,7 +15,7 @@ import GHC.CmmToAsm.Instr
import GHC.Platform.Reg
import GHC.Cmm hiding (RegSet)
import GHC.Cmm.BlockId
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapFoldlWithKey, mapLookup, mapInsert)
import GHC.Utils.Monad
import GHC.Utils.Monad.State.Strict
=====================================
compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs
=====================================
@@ -49,7 +49,7 @@ import GHC.Utils.Monad.State.Strict
import GHC.Utils.Outputable
import GHC.Utils.Panic
import GHC.Platform
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapLookup)
import Data.List (nub, foldl1', find)
import Data.Maybe
=====================================
compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs
=====================================
@@ -24,7 +24,7 @@ import GHC.Platform.Reg
import GHC.Data.Graph.Base
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapLookup, Label, LabelMap)
import GHC.Cmm
import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
=====================================
compiler/GHC/CmmToAsm/Reg/Linear.hs
=====================================
@@ -122,7 +122,7 @@ import GHC.Platform.Reg
import GHC.Platform.Reg.Class (RegClass(..))
import GHC.Cmm.BlockId
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapLookup)
import GHC.Cmm hiding (RegSet)
import GHC.Data.Graph.Directed
=====================================
compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs
=====================================
@@ -23,7 +23,7 @@ import GHC.CmmToAsm.Types
import GHC.Platform.Reg
import GHC.Cmm.BlockId
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapLookup)
import GHC.Data.Graph.Directed
import GHC.Utils.Panic
import GHC.Utils.Monad (concatMapM)
=====================================
compiler/GHC/CmmToAsm/Reg/Liveness.hs
=====================================
@@ -46,7 +46,8 @@ import GHC.CmmToAsm.Types
import GHC.CmmToAsm.Utils
import GHC.Cmm.BlockId
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapToList, LabelMap, mapInsert, mapEmpty, mapFilterWithKey, mapLookup, mapMap)
+import GHC.Cmm.Dataflow.Label.NonDet (LabelSet, setMember, setFromList)
import GHC.Cmm hiding (RegSet, emptyRegSet)
import GHC.Data.Graph.Directed
=====================================
compiler/GHC/CmmToAsm/Wasm/FromCmm.hs
=====================================
@@ -34,7 +34,7 @@ import GHC.Cmm
import GHC.Cmm.BlockId
import GHC.Cmm.CLabel
import GHC.Cmm.Dataflow.Block
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Cmm.InitFini
import GHC.CmmToAsm.Wasm.Types
import GHC.CmmToAsm.Wasm.Utils
=====================================
compiler/GHC/CmmToAsm/X86/CodeGen.hs
=====================================
@@ -66,7 +66,7 @@ import GHC.Cmm.Switch
import GHC.Cmm
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (LabelMap, mapMember)
import GHC.Cmm.CLabel
import GHC.Types.Tickish ( GenTickish(..) )
import GHC.Types.SrcLoc ( srcSpanFile, srcSpanStartLine, srcSpanStartCol )
=====================================
compiler/GHC/CmmToAsm/X86/Instr.hs
=====================================
@@ -54,7 +54,7 @@ import GHC.CmmToAsm.Reg.Target
import GHC.CmmToAsm.Config
import GHC.Cmm.BlockId
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Platform.Regs
import GHC.Cmm
import GHC.Utils.Outputable
=====================================
compiler/GHC/CmmToLlvm/CodeGen.hs
=====================================
@@ -24,7 +24,7 @@ import GHC.Cmm.Utils
import GHC.Cmm.Switch
import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapLookup)
import GHC.Data.FastString
import GHC.Data.OrdList
=====================================
compiler/GHC/Data/Graph/Collapse.hs
=====================================
@@ -22,7 +22,7 @@ import Control.Monad
import Data.List (delete, union, insert, intersect)
import Data.Semigroup
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Data.Graph.Inductive.Graph
import GHC.Types.Unique.Supply
import GHC.Utils.Panic hiding (assert)
=====================================
compiler/GHC/StgToCmm/Heap.hs
=====================================
@@ -33,7 +33,7 @@ import GHC.StgToCmm.Closure
import GHC.Cmm.Graph
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label.NonDet
import GHC.Runtime.Heap.Layout
import GHC.Cmm.BlockId
import GHC.Cmm
=====================================
compiler/GHC/StgToCmm/Monad.hs
=====================================
@@ -76,7 +76,7 @@ import GHC.StgToCmm.Sequel
import GHC.Cmm.Graph as CmmGraph
import GHC.Cmm.BlockId
import GHC.Cmm.CLabel
-import GHC.Cmm.Dataflow.Label
+import GHC.Cmm.Dataflow.Label (mapSingleton, mapEmpty)
import GHC.Runtime.Heap.Layout
import GHC.Unit
import GHC.Types.Id
=====================================
compiler/GHC/Types/Unique/DFM.hs
=====================================
@@ -21,6 +21,7 @@ is not deterministic.
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{-# OPTIONS_GHC -Wall #-}
+{-# OPTIONS_GHC -ddump-simpl -ddump-stg-final -ddump-to-file -dumpdir=/var/folders/tv/35hlch6s3y15hfvndc71l6d40000gn/T/tmp.bJv7ldTSvf #-}
module GHC.Types.Unique.DFM (
-- * Unique-keyed deterministic mappings
=====================================
compiler/ghc.cabal.in
=====================================
@@ -237,6 +237,7 @@ Library
GHC.Cmm.Dataflow.Block
GHC.Cmm.Dataflow.Graph
GHC.Cmm.Dataflow.Label
+ GHC.Cmm.Dataflow.Label.NonDet
GHC.Cmm.DebugBlock
GHC.Cmm.Expr
GHC.Cmm.GenericOpt
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2d58e77c2e7a9386972e3ba704183dc396c12d3f
--
This project does not include diff previews in email notifications.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2d58e77c2e7a9386972e3ba704183dc396c12d3f
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240711/0ac10c09/attachment-0001.html>
More information about the ghc-commits
mailing list