summaryrefslogtreecommitdiff
path: root/compiler/cmm/CmmLayoutStack.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/cmm/CmmLayoutStack.hs')
-rw-r--r--compiler/cmm/CmmLayoutStack.hs12
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/cmm/CmmLayoutStack.hs b/compiler/cmm/CmmLayoutStack.hs
index 25a0ad6169..5c3be17e44 100644
--- a/compiler/cmm/CmmLayoutStack.hs
+++ b/compiler/cmm/CmmLayoutStack.hs
@@ -184,7 +184,7 @@ instance Outputable StackMap where
text "Sp = " <> int sm_sp $$
text "sm_args = " <> int sm_args $$
text "sm_ret_off = " <> int sm_ret_off $$
- text "sm_regs = " <> ppr (eltsUFM sm_regs)
+ text "sm_regs = " <> pprUFM sm_regs ppr
cmmLayoutStack :: DynFlags -> ProcPointSet -> ByteOff -> CmmGraph
@@ -684,7 +684,8 @@ allocate dflags ret_off live stackmap@StackMap{ sm_sp = sp0
| x <- [ 1 .. toWords dflags ret_off] ]
live_words =
[ (toWords dflags x, Occupied)
- | (r,off) <- eltsUFM regs1,
+ | (r,off) <- nonDetEltsUFM regs1,
+ -- See Note [Unique Determinism and code generation]
let w = localRegBytes dflags r,
x <- [ off, off - wORD_SIZE dflags .. off - w + 1] ]
in
@@ -964,7 +965,9 @@ stackMapToLiveness dflags StackMap{..} =
toWords dflags (sm_sp - sm_args)) live_words
where
live_words = [ (toWords dflags off, False)
- | (r,off) <- eltsUFM sm_regs, isGcPtrType (localRegType r) ]
+ | (r,off) <- nonDetEltsUFM sm_regs
+ , isGcPtrType (localRegType r) ]
+ -- See Note [Unique Determinism and code generation]
-- -----------------------------------------------------------------------------
@@ -1118,4 +1121,5 @@ insertReloads stackmap =
stackSlotRegs :: StackMap -> [(LocalReg, StackLoc)]
-stackSlotRegs sm = eltsUFM (sm_regs sm)
+stackSlotRegs sm = nonDetEltsUFM (sm_regs sm)
+ -- See Note [Unique Determinism and code generation]