| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
GHC.Cmm.Expr
Synopsis
- data CmmExpr
 - cmmExprType :: Platform -> CmmExpr -> CmmType
 - cmmExprWidth :: Platform -> CmmExpr -> Width
 - cmmExprAlignment :: CmmExpr -> Alignment
 - maybeInvertCmmExpr :: CmmExpr -> Maybe CmmExpr
 - data CmmReg
 - cmmRegType :: CmmReg -> CmmType
 - cmmRegWidth :: CmmReg -> Width
 - data CmmLit
 - cmmLitType :: Platform -> CmmLit -> CmmType
 - data AlignmentSpec
 - data LocalReg = LocalReg !Unique !CmmType
 - localRegType :: LocalReg -> CmmType
 - data GlobalReg
- = VanillaReg !Int
 - | FloatReg !Int
 - | DoubleReg !Int
 - | LongReg !Int
 - | XmmReg !Int
 - | YmmReg !Int
 - | ZmmReg !Int
 - | Sp
 - | SpLim
 - | Hp
 - | HpLim
 - | CCCS
 - | CurrentTSO
 - | CurrentNursery
 - | HpAlloc
 - | EagerBlackholeInfo
 - | GCEnter1
 - | GCFun
 - | BaseReg
 - | MachSp
 - | UnwindReturnReg
 - | PicBaseReg
 
 - isArgReg :: GlobalReg -> Bool
 - globalRegSpillType :: Platform -> GlobalReg -> CmmType
 - data GlobalRegUse = GlobalRegUse {}
 - spReg :: Platform -> CmmReg
 - hpReg :: Platform -> CmmReg
 - spLimReg :: Platform -> CmmReg
 - hpLimReg :: Platform -> CmmReg
 - nodeReg :: Platform -> CmmReg
 - currentTSOReg :: Platform -> CmmReg
 - currentNurseryReg :: Platform -> CmmReg
 - hpAllocReg :: Platform -> CmmReg
 - cccsReg :: Platform -> CmmReg
 - node :: GlobalReg
 - baseReg :: Platform -> CmmReg
 - class Ord r => DefinerOfRegs r a
 - class Ord r => UserOfRegs r a
 - foldRegsDefd :: DefinerOfRegs r a => Platform -> (b -> r -> b) -> b -> a -> b
 - foldRegsUsed :: UserOfRegs r a => Platform -> (b -> r -> b) -> b -> a -> b
 - foldLocalRegsDefd :: DefinerOfRegs LocalReg a => Platform -> (b -> LocalReg -> b) -> b -> a -> b
 - foldLocalRegsUsed :: UserOfRegs LocalReg a => Platform -> (b -> LocalReg -> b) -> b -> a -> b
 - type RegSet r = Set r
 - type LocalRegSet = RegSet LocalReg
 - type GlobalRegSet = RegSet GlobalReg
 - emptyRegSet :: RegSet r
 - elemRegSet :: Ord r => r -> RegSet r -> Bool
 - extendRegSet :: Ord r => RegSet r -> r -> RegSet r
 - deleteFromRegSet :: Ord r => RegSet r -> r -> RegSet r
 - mkRegSet :: Ord r => [r] -> RegSet r
 - plusRegSet :: Ord r => RegSet r -> RegSet r -> RegSet r
 - minusRegSet :: Ord r => RegSet r -> RegSet r -> RegSet r
 - timesRegSet :: Ord r => RegSet r -> RegSet r -> RegSet r
 - sizeRegSet :: RegSet r -> Int
 - nullRegSet :: RegSet r -> Bool
 - regSetToList :: RegSet r -> [r]
 - isTrivialCmmExpr :: CmmExpr -> Bool
 - hasNoGlobalRegs :: CmmExpr -> Bool
 - isLit :: CmmExpr -> Bool
 - isComparisonExpr :: CmmExpr -> Bool
 - data Area
 - module GHC.Cmm.MachOp
 - module GHC.Cmm.Type
 
Documentation
Constructors
| CmmLit !CmmLit | |
| CmmLoad !CmmExpr !CmmType !AlignmentSpec | |
| CmmReg !CmmReg | |
| CmmMachOp MachOp [CmmExpr] | |
| CmmStackSlot Area !Int | |
| CmmRegOff !CmmReg !Int | 
cmmExprAlignment :: CmmExpr -> Alignment Source #
Returns an alignment in bytes of a CmmExpr when it's a statically known integer constant, otherwise returns an alignment of 1 byte. The caller is responsible for using with a sensible CmmExpr argument.
Constructors
| CmmLocal !LocalReg | |
| CmmGlobal GlobalRegUse | 
Instances
| Show CmmReg Source # | |
| Outputable CmmReg Source # | |
| Eq CmmReg Source # | |
| Ord CmmReg Source # | |
| DefinerOfRegs GlobalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| DefinerOfRegs GlobalRegUse CmmReg Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b Source #  | |
| DefinerOfRegs LocalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| UserOfRegs GlobalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| UserOfRegs GlobalRegUse CmmReg Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b Source #  | |
| UserOfRegs LocalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
cmmRegType :: CmmReg -> CmmType Source #
cmmRegWidth :: CmmReg -> Width Source #
Constructors
| CmmInt !Integer !Width | |
| CmmFloat Rational !Width | |
| CmmVec [CmmLit] | |
| CmmLabel CLabel | |
| CmmLabelOff CLabel !Int | |
| CmmLabelDiffOff CLabel CLabel !Int !Width | |
| CmmBlock !BlockId | |
| CmmHighStackMark | 
data AlignmentSpec Source #
Constructors
| NaturallyAligned | |
| Unaligned | 
Instances
| Show AlignmentSpec Source # | |
Defined in GHC.Cmm.Expr  | |
| Eq AlignmentSpec Source # | |
Defined in GHC.Cmm.Expr Methods (==) :: AlignmentSpec -> AlignmentSpec -> Bool # (/=) :: AlignmentSpec -> AlignmentSpec -> Bool #  | |
| Ord AlignmentSpec Source # | |
Defined in GHC.Cmm.Expr Methods compare :: AlignmentSpec -> AlignmentSpec -> Ordering # (<) :: AlignmentSpec -> AlignmentSpec -> Bool # (<=) :: AlignmentSpec -> AlignmentSpec -> Bool # (>) :: AlignmentSpec -> AlignmentSpec -> Bool # (>=) :: AlignmentSpec -> AlignmentSpec -> Bool # max :: AlignmentSpec -> AlignmentSpec -> AlignmentSpec # min :: AlignmentSpec -> AlignmentSpec -> AlignmentSpec #  | |
Instances
| Show LocalReg Source # | |
| Uniquable LocalReg Source # | |
| Outputable LocalReg Source # | |
| Eq LocalReg Source # | |
| Ord LocalReg Source # | |
Defined in GHC.Cmm.Reg  | |
| DefinerOfRegs LocalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| UserOfRegs LocalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| DefinerOfRegs LocalReg (CmmNode e x) Source # | |
Defined in GHC.Cmm.Node  | |
| UserOfRegs LocalReg (CmmNode e x) Source # | |
Defined in GHC.Cmm.Node  | |
localRegType :: LocalReg -> CmmType Source #
An abstract global register for the STG machine.
See also GlobalRegUse, which denotes a usage of a register at a particular
 type (e.g. using a 32-bit wide register to store an 8-bit wide value), as per
 Note [GlobalReg vs GlobalRegUse].
Constructors
Instances
| Show GlobalReg Source # | |
| Outputable GlobalReg Source # | |
| Eq GlobalReg Source # | |
| Ord GlobalReg Source # | |
| DefinerOfRegs GlobalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| UserOfRegs GlobalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| OutputableP env GlobalReg Source # | |
| DefinerOfRegs GlobalReg (CmmNode e x) Source # | |
Defined in GHC.Cmm.Node  | |
| UserOfRegs GlobalReg (CmmNode e x) Source # | |
Defined in GHC.Cmm.Node  | |
data GlobalRegUse Source #
A use of a global register at a particular type.
While a GlobalReg identifies a global register in the STG machine,
 a GlobalRegUse also contains information about the type we are storing
 in the register.
See Note [GlobalReg vs GlobalRegUse] for more information.
Constructors
| GlobalRegUse | |
Fields 
  | |
Instances
| Show GlobalRegUse Source # | |
Defined in GHC.Cmm.Reg  | |
| Outputable GlobalRegUse Source # | |
Defined in GHC.Cmm.Reg Methods ppr :: GlobalRegUse -> SDoc Source #  | |
| Eq GlobalRegUse Source # | |
Defined in GHC.Cmm.Reg  | |
| Ord GlobalRegUse Source # | |
Defined in GHC.Cmm.Reg Methods compare :: GlobalRegUse -> GlobalRegUse -> Ordering # (<) :: GlobalRegUse -> GlobalRegUse -> Bool # (<=) :: GlobalRegUse -> GlobalRegUse -> Bool # (>) :: GlobalRegUse -> GlobalRegUse -> Bool # (>=) :: GlobalRegUse -> GlobalRegUse -> Bool # max :: GlobalRegUse -> GlobalRegUse -> GlobalRegUse # min :: GlobalRegUse -> GlobalRegUse -> GlobalRegUse #  | |
| DefinerOfRegs GlobalRegUse CmmReg Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b Source #  | |
| UserOfRegs GlobalRegUse CmmReg Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b Source #  | |
currentTSOReg :: Platform -> CmmReg Source #
currentNurseryReg :: Platform -> CmmReg Source #
hpAllocReg :: Platform -> CmmReg Source #
class Ord r => DefinerOfRegs r a Source #
Minimal complete definition
Instances
| DefinerOfRegs GlobalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| DefinerOfRegs GlobalRegUse CmmReg Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b Source #  | |
| DefinerOfRegs LocalReg CmmReg Source # | |
Defined in GHC.Cmm.Expr  | |
| Ord r => DefinerOfRegs r r Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> r -> b) -> b -> r -> b Source #  | |
| DefinerOfRegs r a => DefinerOfRegs r [a] Source # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> r -> b) -> b -> [a] -> b Source #  | |
| DefinerOfRegs GlobalReg (CmmNode e x) Source # | |
Defined in GHC.Cmm.Node  | |
| DefinerOfRegs LocalReg (CmmNode e x) Source # | |
Defined in GHC.Cmm.Node  | |
class Ord r => UserOfRegs r a Source #
Minimal complete definition
Instances
foldRegsDefd :: DefinerOfRegs r a => Platform -> (b -> r -> b) -> b -> a -> b Source #
foldRegsUsed :: UserOfRegs r a => Platform -> (b -> r -> b) -> b -> a -> b Source #
foldLocalRegsDefd :: DefinerOfRegs LocalReg a => Platform -> (b -> LocalReg -> b) -> b -> a -> b Source #
foldLocalRegsUsed :: UserOfRegs LocalReg a => Platform -> (b -> LocalReg -> b) -> b -> a -> b Source #
type LocalRegSet = RegSet LocalReg Source #
type GlobalRegSet = RegSet GlobalReg Source #
emptyRegSet :: RegSet r Source #
sizeRegSet :: RegSet r -> Int Source #
nullRegSet :: RegSet r -> Bool Source #
regSetToList :: RegSet r -> [r] Source #
isTrivialCmmExpr :: CmmExpr -> Bool Source #
hasNoGlobalRegs :: CmmExpr -> Bool Source #
isComparisonExpr :: CmmExpr -> Bool Source #
A stack area is either the stack slot where a variable is spilled or the stack space where function arguments and results are passed.
module GHC.Cmm.MachOp
module GHC.Cmm.Type