diff options
author | Simon Marlow <marlowsd@gmail.com> | 2012-07-04 13:19:26 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2012-07-04 13:19:47 +0100 |
commit | 3f0afabaf3e862d986279dc041b14b61e73f86d3 (patch) | |
tree | 30b0a2dabcdbf01688040ea28128292970dc4085 /compiler/cmm/CmmLayoutStack.hs | |
parent | 99fd2469fba1a38b2a65b4694f337d92e559df01 (diff) | |
download | haskell-3f0afabaf3e862d986279dc041b14b61e73f86d3.tar.gz |
Fix merge-related problems
Diffstat (limited to 'compiler/cmm/CmmLayoutStack.hs')
-rw-r--r-- | compiler/cmm/CmmLayoutStack.hs | 5 |
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 |