X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fcmm%2FCmmExpr.hs;h=8a5bab1f6cc75d91aac2b281634b337359fd9853;hp=e1a78a707e3f026a0a34a861cbc346520c966a8c;hb=edc0bafd3fcd01b85a2e8894e5dfe149eb0e0857;hpb=b25c93f1c914d81d77aeafeb49263f29bed128aa diff --git a/compiler/cmm/CmmExpr.hs b/compiler/cmm/CmmExpr.hs index e1a78a7..8a5bab1 100644 --- a/compiler/cmm/CmmExpr.hs +++ b/compiler/cmm/CmmExpr.hs @@ -22,6 +22,7 @@ module CmmExpr , DefinerOfSlots, UserOfSlots, foldSlotsDefd, foldSlotsUsed , RegSet, emptyRegSet, elemRegSet, extendRegSet, deleteFromRegSet, mkRegSet , plusRegSet, minusRegSet, timesRegSet + , regUsedIn , Area(..), AreaId(..), SubArea, SubAreaSet, AreaMap, isStackSlotOf -- MachOp @@ -48,13 +49,13 @@ import BlockId import CLabel import Constants import FastString -import FiniteMap import Outputable import Unique import UniqSet import Data.Word import Data.Int +import Data.Map (Map) ----------------------------------------------------------------------------- -- CmmExpr @@ -116,8 +117,11 @@ necessarily at the young end of the Old area. End of note -} type SubArea = (Area, Int, Int) -- area, offset, width -type SubAreaSet = FiniteMap Area [SubArea] -type AreaMap = FiniteMap Area Int +type SubAreaSet = Map Area [SubArea] + +type AreaMap = Map Area Int + -- Byte offset of the oldest byte of the Area, + -- relative to the oldest byte of the Old Area data CmmLit = CmmInt Integer Width @@ -271,6 +275,16 @@ instance DefinerOfLocalRegs a => DefinerOfLocalRegs (Maybe a) where foldRegsDefd _ set Nothing = set foldRegsDefd f set (Just x) = foldRegsDefd f set x +----------------------------------------------------------------------------- +-- Another reg utility + +regUsedIn :: CmmReg -> CmmExpr -> Bool +_ `regUsedIn` CmmLit _ = False +reg `regUsedIn` CmmLoad e _ = reg `regUsedIn` e +reg `regUsedIn` CmmReg reg' = reg == reg' +reg `regUsedIn` CmmRegOff reg' _ = reg == reg' +reg `regUsedIn` CmmMachOp _ es = any (reg `regUsedIn`) es +_ `regUsedIn` CmmStackSlot _ _ = False ----------------------------------------------------------------------------- -- Stack slots