Safe Haskell | Safe-Inferred |
---|---|
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 |
Instances
Show CmmExpr # | |
Eq CmmExpr # | |
(Ord r, UserOfRegs r CmmReg) => UserOfRegs r CmmExpr # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> r -> b) -> b -> CmmExpr -> b # | |
OutputableP Platform CmmExpr # | |
cmmExprType :: Platform -> CmmExpr -> CmmType #
cmmExprWidth :: Platform -> CmmExpr -> Width #
cmmExprAlignment :: CmmExpr -> Alignment #
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.
maybeInvertCmmExpr :: CmmExpr -> Maybe CmmExpr #
Constructors
CmmLocal !LocalReg | |
CmmGlobal GlobalRegUse |
Instances
Show CmmReg # | |
Outputable CmmReg # | |
Defined in GHC.Cmm.Reg | |
Eq CmmReg # | |
Ord CmmReg # | |
DefinerOfRegs GlobalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalReg -> b) -> b -> CmmReg -> b # | |
DefinerOfRegs GlobalRegUse CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b # | |
DefinerOfRegs LocalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> LocalReg -> b) -> b -> CmmReg -> b # | |
UserOfRegs GlobalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> GlobalReg -> b) -> b -> CmmReg -> b # | |
UserOfRegs GlobalRegUse CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b # | |
UserOfRegs LocalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> LocalReg -> b) -> b -> CmmReg -> b # |
cmmRegType :: CmmReg -> CmmType #
cmmRegWidth :: CmmReg -> Width #
Constructors
CmmInt !Integer !Width | |
CmmFloat Rational !Width | |
CmmVec [CmmLit] | |
CmmLabel CLabel | |
CmmLabelOff CLabel !Int | |
CmmLabelDiffOff CLabel CLabel !Int !Width | |
CmmBlock !BlockId | |
CmmHighStackMark |
Instances
Show CmmLit # | |
Outputable CmmLit # | |
Defined in GHC.Cmm.Expr | |
Eq CmmLit # | |
OutputableP Platform CmmLit # | |
cmmLitType :: Platform -> CmmLit -> CmmType #
data AlignmentSpec #
Constructors
NaturallyAligned | |
Unaligned |
Instances
Show AlignmentSpec # | |
Defined in GHC.Cmm.Expr Methods showsPrec :: Int -> AlignmentSpec -> ShowS # show :: AlignmentSpec -> String # showList :: [AlignmentSpec] -> ShowS # | |
Eq AlignmentSpec # | |
Defined in GHC.Cmm.Expr Methods (==) :: AlignmentSpec -> AlignmentSpec -> Bool # (/=) :: AlignmentSpec -> AlignmentSpec -> Bool # | |
Ord AlignmentSpec # | |
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 # | |
Uniquable LocalReg # | |
Defined in GHC.Cmm.Reg | |
Outputable LocalReg # | |
Defined in GHC.Cmm.Reg | |
Eq LocalReg # | |
Ord LocalReg # | |
Defined in GHC.Cmm.Reg | |
DefinerOfRegs LocalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> LocalReg -> b) -> b -> CmmReg -> b # | |
UserOfRegs LocalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> LocalReg -> b) -> b -> CmmReg -> b # | |
DefinerOfRegs LocalReg (CmmNode e x) # | |
Defined in GHC.Cmm.Node Methods foldRegsDefd :: Platform -> (b -> LocalReg -> b) -> b -> CmmNode e x -> b # | |
UserOfRegs LocalReg (CmmNode e x) # | |
Defined in GHC.Cmm.Node Methods foldRegsUsed :: Platform -> (b -> LocalReg -> b) -> b -> CmmNode e x -> b # |
localRegType :: LocalReg -> CmmType #
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 # | |
Outputable GlobalReg # | |
Defined in GHC.Cmm.Reg | |
Eq GlobalReg # | |
Ord GlobalReg # | |
DefinerOfRegs GlobalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalReg -> b) -> b -> CmmReg -> b # | |
UserOfRegs GlobalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> GlobalReg -> b) -> b -> CmmReg -> b # | |
OutputableP env GlobalReg # | |
Defined in GHC.Cmm.Reg | |
DefinerOfRegs GlobalReg (CmmNode e x) # | |
Defined in GHC.Cmm.Node Methods foldRegsDefd :: Platform -> (b -> GlobalReg -> b) -> b -> CmmNode e x -> b # | |
UserOfRegs GlobalReg (CmmNode e x) # | |
Defined in GHC.Cmm.Node Methods foldRegsUsed :: Platform -> (b -> GlobalReg -> b) -> b -> CmmNode e x -> b # |
globalRegSpillType :: Platform -> GlobalReg -> CmmType #
data GlobalRegUse #
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 # | |
Defined in GHC.Cmm.Reg Methods showsPrec :: Int -> GlobalRegUse -> ShowS # show :: GlobalRegUse -> String # showList :: [GlobalRegUse] -> ShowS # | |
Outputable GlobalRegUse # | |
Defined in GHC.Cmm.Reg Methods ppr :: GlobalRegUse -> SDoc # | |
Eq GlobalRegUse # | |
Defined in GHC.Cmm.Reg | |
Ord GlobalRegUse # | |
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 # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b # | |
UserOfRegs GlobalRegUse CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsUsed :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b # |
currentTSOReg :: Platform -> CmmReg #
currentNurseryReg :: Platform -> CmmReg #
hpAllocReg :: Platform -> CmmReg #
class Ord r => DefinerOfRegs r a #
Minimal complete definition
Instances
DefinerOfRegs GlobalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalReg -> b) -> b -> CmmReg -> b # | |
DefinerOfRegs GlobalRegUse CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> GlobalRegUse -> b) -> b -> CmmReg -> b # | |
DefinerOfRegs LocalReg CmmReg # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> LocalReg -> b) -> b -> CmmReg -> b # | |
Ord r => DefinerOfRegs r r # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> r -> b) -> b -> r -> b # | |
DefinerOfRegs r a => DefinerOfRegs r [a] # | |
Defined in GHC.Cmm.Expr Methods foldRegsDefd :: Platform -> (b -> r -> b) -> b -> [a] -> b # | |
DefinerOfRegs GlobalReg (CmmNode e x) # | |
Defined in GHC.Cmm.Node Methods foldRegsDefd :: Platform -> (b -> GlobalReg -> b) -> b -> CmmNode e x -> b # | |
DefinerOfRegs LocalReg (CmmNode e x) # | |
Defined in GHC.Cmm.Node Methods foldRegsDefd :: Platform -> (b -> LocalReg -> b) -> b -> CmmNode e x -> b # |
class Ord r => UserOfRegs r a #
Minimal complete definition
Instances
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 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 #
sizeRegSet :: RegSet r -> Int #
nullRegSet :: RegSet r -> Bool #
regSetToList :: RegSet r -> [r] #
isTrivialCmmExpr :: CmmExpr -> Bool #
hasNoGlobalRegs :: CmmExpr -> Bool #
isComparisonExpr :: CmmExpr -> Bool #
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