ghc-9.10.3: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Platform.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
- regSingle :: RegNo -> Reg
- realRegSingle :: RegNo -> RealReg
- 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
- newtype RealReg = RealRegSingle 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

Uniquable Reg Source # |
Instance details Defined in GHC.Platform.Reg Methods getUnique :: Reg -> Unique Source #
Outputable Reg Source # | 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 GHC.Platform.Reg Methods ppr :: Reg -> SDoc Source #
Show Reg Source # |
Instance details Defined in GHC.Platform.Reg Methods showsPrec :: Int -> Reg -> ShowS # show :: Reg -> String # showList :: [Reg] -> ShowS #
Eq Reg Source # |
Instance details Defined in GHC.Platform.Reg Methods (==) :: Reg -> Reg -> Bool # (/=) :: Reg -> Reg -> Bool #
Ord Reg Source # |
Instance details Defined in GHC.Platform.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 #

regSingle :: RegNo -> Reg Source #

realRegSingle :: RegNo -> RealReg 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

Uniquable VirtualReg Source # |
Instance details Defined in GHC.Platform.Reg Methods getUnique :: VirtualReg -> Unique Source #
Outputable VirtualReg Source # |
Instance details Defined in GHC.Platform.Reg Methods ppr :: VirtualReg -> SDoc Source #
Show VirtualReg Source # |
Instance details Defined in GHC.Platform.Reg Methods showsPrec :: Int -> VirtualReg -> ShowS # show :: VirtualReg -> String # showList :: [VirtualReg] -> ShowS #
Eq VirtualReg Source # |
Instance details Defined in GHC.Platform.Reg Methods (==) :: VirtualReg -> VirtualReg -> Bool # (/=) :: VirtualReg -> VirtualReg -> Bool #
Ord VirtualReg Source # |
Instance details Defined in GHC.Platform.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 #

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

classOfVirtualReg :: VirtualReg -> RegClass Source #

getHiVirtualRegFromLo :: VirtualReg -> VirtualReg Source #

getHiVRegFromLo :: Reg -> Reg Source #

newtype 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.

Constructors

RealRegSingle RegNo |

#### Instances

Instances details

Uniquable RealReg Source # |
Instance details Defined in GHC.Platform.Reg Methods getUnique :: RealReg -> Unique Source #
Outputable RealReg Source # |
Instance details Defined in GHC.Platform.Reg Methods ppr :: RealReg -> SDoc Source #
Show RealReg Source # |
Instance details Defined in GHC.Platform.Reg Methods showsPrec :: Int -> RealReg -> ShowS # show :: RealReg -> String # showList :: [RealReg] -> ShowS #
Eq RealReg Source # |
Instance details Defined in GHC.Platform.Reg Methods (==) :: RealReg -> RealReg -> Bool # (/=) :: RealReg -> RealReg -> Bool #
Ord RealReg Source # |
Instance details Defined in GHC.Platform.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 #

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.