Reg

ghc-8.10.1: The GHC API

Safe Haskell | None
Language | Haskell2010

Reg

Description

An architecture independent description of a register. This needs to stay architecture independent because it is used by NCGMonad and the register allocators, which are shared by all architectures.

Synopsis

- type RegNo = Int
- data Reg
  - = RegVirtual !VirtualReg
  - | RegReal !RealReg
- regPair :: RegNo -> RegNo -> Reg
- regSingle :: RegNo -> Reg
- isRealReg :: Reg -> Bool
- takeRealReg :: Reg -> Maybe RealReg
- isVirtualReg :: Reg -> Bool
- takeVirtualReg :: Reg -> Maybe VirtualReg
- data VirtualReg
  - = VirtualRegI !Unique
  - | VirtualRegHi !Unique
  - | VirtualRegF !Unique
  - | VirtualRegD !Unique
- renameVirtualReg :: Unique -> VirtualReg -> VirtualReg
- classOfVirtualReg :: VirtualReg -> RegClass
- getHiVirtualRegFromLo :: VirtualReg -> VirtualReg
- getHiVRegFromLo :: Reg -> Reg
- data RealReg
  - = RealRegSingle !RegNo
  - | RealRegPair !RegNo !RegNo
- regNosOfRealReg :: RealReg -> [RegNo]
- realRegsAlias :: RealReg -> RealReg -> Bool
- liftPatchFnToRegReg :: (VirtualReg -> RealReg) -> Reg -> Reg

# Documentation

type RegNo = Int Source #

An identifier for a primitive real machine register.

data Reg Source #

A register, either virtual or real

Constructors

RegVirtual !VirtualReg |
RegReal !RealReg |

#### Instances

Instances details

Eq Reg # |
Instance details Defined in Reg Methods (==) :: Reg -> Reg -> Bool # (/=) :: Reg -> Reg -> Bool #
Ord Reg # |
Instance details Defined in Reg Methods compare :: Reg -> Reg -> Ordering # (<) :: Reg -> Reg -> Bool # (<=) :: Reg -> Reg -> Bool # (>) :: Reg -> Reg -> Bool # (>=) :: Reg -> Reg -> Bool # max :: Reg -> Reg -> Reg # min :: Reg -> Reg -> Reg #
Outputable Reg # | Print a reg in a generic manner If you want the architecture specific names, then use the pprReg function from the appropriate Ppr module.
Instance details Defined in Reg Methods ppr :: Reg -> SDoc Source # pprPrec :: Rational -> Reg -> SDoc Source #
Uniquable Reg # |
Instance details Defined in Reg Methods getUnique :: Reg -> Unique Source #

regPair :: RegNo -> RegNo -> Reg Source #

regSingle :: RegNo -> Reg Source #

isRealReg :: Reg -> Bool Source #

takeRealReg :: Reg -> Maybe RealReg Source #

isVirtualReg :: Reg -> Bool Source #

takeVirtualReg :: Reg -> Maybe VirtualReg Source #

data VirtualReg Source #

Constructors

VirtualRegI !Unique |
VirtualRegHi !Unique |
VirtualRegF !Unique |
VirtualRegD !Unique |

#### Instances

Instances details

Eq VirtualReg # |
Instance details Defined in Reg Methods (==) :: VirtualReg -> VirtualReg -> Bool # (/=) :: VirtualReg -> VirtualReg -> Bool #
Ord VirtualReg # |
Instance details Defined in Reg Methods compare :: VirtualReg -> VirtualReg -> Ordering # (<) :: VirtualReg -> VirtualReg -> Bool # (<=) :: VirtualReg -> VirtualReg -> Bool # (>) :: VirtualReg -> VirtualReg -> Bool # (>=) :: VirtualReg -> VirtualReg -> Bool # max :: VirtualReg -> VirtualReg -> VirtualReg # min :: VirtualReg -> VirtualReg -> VirtualReg #
Show VirtualReg # |
Instance details Defined in Reg Methods showsPrec :: Int -> VirtualReg -> ShowS Source # show :: VirtualReg -> String Source # showList :: [VirtualReg] -> ShowS Source #
Outputable VirtualReg # |
Instance details Defined in Reg Methods ppr :: VirtualReg -> SDoc Source # pprPrec :: Rational -> VirtualReg -> SDoc Source #
Uniquable VirtualReg # |
Instance details Defined in Reg Methods getUnique :: VirtualReg -> Unique Source #

renameVirtualReg :: Unique -> VirtualReg -> VirtualReg Source #

classOfVirtualReg :: VirtualReg -> RegClass Source #

getHiVirtualRegFromLo :: VirtualReg -> VirtualReg Source #

getHiVRegFromLo :: Reg -> Reg Source #

data RealReg Source #

RealRegs are machine regs which are available for allocation, in the usual way. We know what class they are, because that's part of the processor's architecture.

RealRegPairs are pairs of real registers that are allocated together to hold a larger value, such as with Double regs on SPARC.

Constructors

RealRegSingle !RegNo |
RealRegPair !RegNo !RegNo |

#### Instances

Instances details

Eq RealReg # |
Instance details Defined in Reg Methods (==) :: RealReg -> RealReg -> Bool # (/=) :: RealReg -> RealReg -> Bool #
Ord RealReg # |
Instance details Defined in Reg Methods compare :: RealReg -> RealReg -> Ordering # (<) :: RealReg -> RealReg -> Bool # (<=) :: RealReg -> RealReg -> Bool # (>) :: RealReg -> RealReg -> Bool # (>=) :: RealReg -> RealReg -> Bool # max :: RealReg -> RealReg -> RealReg # min :: RealReg -> RealReg -> RealReg #
Show RealReg # |
Instance details Defined in Reg Methods showsPrec :: Int -> RealReg -> ShowS Source # show :: RealReg -> String Source # showList :: [RealReg] -> ShowS Source #
Outputable RealReg # |
Instance details Defined in Reg Methods ppr :: RealReg -> SDoc Source # pprPrec :: Rational -> RealReg -> SDoc Source #
Uniquable RealReg # |
Instance details Defined in Reg Methods getUnique :: RealReg -> Unique Source #

regNosOfRealReg :: RealReg -> [RegNo] Source #

realRegsAlias :: RealReg -> RealReg -> Bool Source #

liftPatchFnToRegReg :: (VirtualReg -> RealReg) -> Reg -> Reg Source #

The patch function supplied by the allocator maps VirtualReg to RealReg regs, but sometimes we want to apply it to plain old Reg.