diff options
author | dias@eecs.tufts.edu <unknown> | 2009-03-16 21:35:06 +0000 |
---|---|---|
committer | dias@eecs.tufts.edu <unknown> | 2009-03-16 21:35:06 +0000 |
commit | 5dc8b425443200a5160b9d1399aca1808bfcffee (patch) | |
tree | 819845f0d60cfbbee7f7aec142ac504df73ccace /compiler/cmm/CmmSpillReload.hs | |
parent | 4bc25e8c30559b7a6a87b39afcc79340ae778788 (diff) | |
download | haskell-5dc8b425443200a5160b9d1399aca1808bfcffee.tar.gz |
stack overflows and out of memory's
1. Stack overflow fixed by making dataflow monad strict in the state.
2. Out of memory fixed by "forgetting" lastoutfacts in the dataflow monad
where we should. We were creating an unnecessarily long list that grew
exponentially...
Diffstat (limited to 'compiler/cmm/CmmSpillReload.hs')
-rw-r--r-- | compiler/cmm/CmmSpillReload.hs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/compiler/cmm/CmmSpillReload.hs b/compiler/cmm/CmmSpillReload.hs index 085dc377db..fb6931e006 100644 --- a/compiler/cmm/CmmSpillReload.hs +++ b/compiler/cmm/CmmSpillReload.hs @@ -66,7 +66,7 @@ changeRegs f live = live { in_regs = f (in_regs live) } dualLiveLattice :: DataflowLattice DualLive dualLiveLattice = - DataflowLattice "variables live in registers and on stack" empty add False + DataflowLattice "variables live in registers and on stack" empty add True where empty = DualLive emptyRegSet emptyRegSet -- | compute in the Tx monad to track whether anything has changed add new old = do stack <- add1 (on_stack new) (on_stack old) |