summaryrefslogtreecommitdiff
path: root/compiler/cmm/CmmLayoutStack.hs
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-07-04 13:19:26 +0100
committerSimon Marlow <marlowsd@gmail.com>2012-07-04 13:19:47 +0100
commit3f0afabaf3e862d986279dc041b14b61e73f86d3 (patch)
tree30b0a2dabcdbf01688040ea28128292970dc4085 /compiler/cmm/CmmLayoutStack.hs
parent99fd2469fba1a38b2a65b4694f337d92e559df01 (diff)
downloadhaskell-3f0afabaf3e862d986279dc041b14b61e73f86d3.tar.gz
Fix merge-related problems
Diffstat (limited to 'compiler/cmm/CmmLayoutStack.hs')
-rw-r--r--compiler/cmm/CmmLayoutStack.hs5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/cmm/CmmLayoutStack.hs b/compiler/cmm/CmmLayoutStack.hs
index 660506e7dc..573ce0eba0 100644
--- a/compiler/cmm/CmmLayoutStack.hs
+++ b/compiler/cmm/CmmLayoutStack.hs
@@ -1033,13 +1033,16 @@ walk (n:ns) acc as
(dropped, as') = partition should_drop as
where should_drop a = a `conflicts` n
+toNodes :: [(LocalReg,CmmExpr)] -> [CmmNode O O]
toNodes as = [ CmmAssign (CmmLocal r) rhs | (r,rhs) <- as ]
-- We only sink "r = G" assignments right now, so conflicts is very simple:
-(r, rhs) `conflicts` CmmAssign reg _ | reg `regUsedIn` rhs = True
+conflicts :: (LocalReg,CmmExpr) -> CmmNode O O -> Bool
+(_, rhs) `conflicts` CmmAssign reg _ | reg `regUsedIn` rhs = True
--(r, CmmLoad _ _) `conflicts` CmmStore _ _ = True
(r, _) `conflicts` node
= foldRegsUsed (\b r' -> r == r' || b) False node
+conflictsWithLast :: (LocalReg,CmmExpr) -> CmmNode O C -> Bool
(r, _) `conflictsWithLast` node
= foldRegsUsed (\b r' -> r == r' || b) False node