Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Synopsis
- data VarInfo = VarInfo {}
- type VarId = Int
- data VarKind
- = Input
- | InputOutput
- | Temp
- | Output
- data OpInfo m op1 op2 = OpInfo {}
- data OpKind
- data BlockInfo m blk1 blk2 op1 op2 = BlockInfo {
- blockId :: blk1 -> Int
- blockSuccessors :: blk1 -> [Int]
- splitCriticalEdge :: blk1 -> blk1 -> m (blk1, blk1)
- blockOps :: blk1 -> ([op1], [op1], [op1])
- setBlockOps :: blk1 -> [op2] -> [op2] -> [op2] -> blk2
- type PhysReg = Int
- data UseVerifier
Documentation
Each "virtual variable" has details associated with it that affect the allocation procedure.
VarInfo | |
|
data OpInfo m op1 op2 Source #
Every operation may reference multiple variables and/or specific physical registers. If a physical register is referenced, then that register is considered unavailable for allocation over its range of use.
Certain operations have special significance as to how basic blocks are
organized and lifetime of allocations. Thus, if an operation begins or
ends a loop, or represents a method call, this should be indicated using
the OpKind
field. Indication of calls is necessary for saving and
restoring all registers around a call, while indication of loops is
optional, as it merely avoids reloading spilled variables inside loop
bodies.
OpInfo | |
|
data BlockInfo m blk1 blk2 op1 op2 Source #
From the point of view of this library, a basic block is nothing more than an ordered sequence of operations.
BlockInfo | |
|
data UseVerifier Source #
Instances
Eq UseVerifier Source # | |
Defined in RegAlloc.Types (==) :: UseVerifier -> UseVerifier -> Bool # (/=) :: UseVerifier -> UseVerifier -> Bool # | |
Show UseVerifier Source # | |
Defined in RegAlloc.Types showsPrec :: Int -> UseVerifier -> ShowS # show :: UseVerifier -> String # showList :: [UseVerifier] -> ShowS # |