where
-import RegAlloc.Linear.FreeRegs
import RegAlloc.Linear.StackMap
import RegAlloc.Liveness
import Reg
-- target a particular label. We have to insert fixup code to make
-- the register assignments from the different sources match up.
--
-type BlockAssignment
- = BlockMap (FreeRegs, RegMap Loc)
+type BlockAssignment freeRegs
+ = BlockMap (freeRegs, RegMap Loc)
-- | Where a vreg is currently stored
-- | The register alloctor state
-data RA_State
+data RA_State freeRegs
= RA_State
{
-- | the current mapping from basic blocks to
-- the register assignments at the beginning of that block.
- ra_blockassig :: BlockAssignment
+ ra_blockassig :: BlockAssignment freeRegs
-- | free machine registers
- , ra_freeregs :: {-#UNPACK#-}!FreeRegs
+ , ra_freeregs :: !freeRegs
-- | assignment of temps to locations
, ra_assig :: RegMap Loc
-- | The register allocator monad type.
-newtype RegM a
- = RegM { unReg :: RA_State -> (# RA_State, a #) }
+newtype RegM freeRegs a
+ = RegM { unReg :: RA_State freeRegs -> (# RA_State freeRegs, a #) }