LinearScan

Implementation of: "Optimized Interval Splitting in a Linear Scan Register Allocator" "Linear Scan Register Allocation on SSA Form"

struct LinearScan {}

Members

Functions

allocateBlockedReg
void allocateBlockedReg(FunctionDeclNode* fun, IntervalIndex currentId, uint currentStart, ubyte regClass)
Undocumented in source. Be warned that the author may not have intended to support it.
assignSpillSlot
void assignSpillSlot(LiveInterval* it)
Undocumented in source. Be warned that the author may not have intended to support it.
checkActive
void checkActive(uint position)
Undocumented in source. Be warned that the author may not have intended to support it.
checkActiveImpl
void checkActiveImpl(uint position, Array!IntervalIndex active, Array!IntervalIndex inactive)
Undocumented in source. Be warned that the author may not have intended to support it.
checkInactive
void checkInactive(uint position)
Undocumented in source. Be warned that the author may not have intended to support it.
checkInactiveImpl
void checkInactiveImpl(uint position, Array!IntervalIndex active, Array!IntervalIndex inactive)
Undocumented in source. Be warned that the author may not have intended to support it.
fixInstructionArgs
void fixInstructionArgs(FunctionDeclNode* fun)
Undocumented in source. Be warned that the author may not have intended to support it.
fixInstructionResults
void fixInstructionResults(FunctionDeclNode* fun)
Undocumented in source. Be warned that the author may not have intended to support it.
fixTwoOperandForm
void fixTwoOperandForm(InstrInfo instrInfo, IrIndex instrIndex, IrInstrHeader* instrHeader)
Undocumented in source. Be warned that the author may not have intended to support it.
freeMem
void freeMem()
Undocumented in source. Be warned that the author may not have intended to support it.
genSaveCalleeSavedRegs
void genSaveCalleeSavedRegs()
Undocumented in source. Be warned that the author may not have intended to support it.
getMoveArgSize
IrArgSize getMoveArgSize(IrIndex value)
Undocumented in source. Be warned that the author may not have intended to support it.
getScratchSpillSlot
IrIndex getScratchSpillSlot()
Undocumented in source. Be warned that the author may not have intended to support it.
live
LivenessInfo live()
Undocumented in source. Be warned that the author may not have intended to support it.
resolveControlFlow
void resolveControlFlow(MoveSolver moveSolver)
Undocumented in source. Be warned that the author may not have intended to support it.
resolveEdge
void resolveEdge(MoveSolver moveSolver, IrIndex predIndex, IrBasicBlock predBlock, IrIndex succIndex, IrBasicBlock succBlock)
Undocumented in source. Be warned that the author may not have intended to support it.
resolveInsertSplitMoves
void resolveInsertSplitMoves(MoveSolver moveSolver)
Undocumented in source. Be warned that the author may not have intended to support it.
scanFun
void scanFun()
Undocumented in source. Be warned that the author may not have intended to support it.
splitBefore
IntervalIndex splitBefore(IntervalIndex it, uint before)
Undocumented in source. Be warned that the author may not have intended to support it.
splitBefore
IntervalIndex splitBefore(IntervalIndex it, uint before, LiveRangeIndex rangeIndex)
Undocumented in source. Be warned that the author may not have intended to support it.
splitCriticalEdge
IrIndex splitCriticalEdge(IrIndex predIndex, IrBasicBlock predBlock, IrIndex succIndex, IrBasicBlock succBlock)

Critical edge is edge between predecessor and successor where predecessor has more that 1 successor and successor has more than 1 predecessor Splitting of this edge is done by inserting new basic block on the edge This new block is then returned successor list of predecessor is updated as well as predecessor list of successor Phi functions are not updated

tryAllocateFreeReg
bool tryAllocateFreeReg(IntervalIndex currentId, ubyte regClass)
Undocumented in source. Be warned that the author may not have intended to support it.

Variables

activeFixed
Array!IntervalIndex activeFixed;
Undocumented in source.
activeVirtual
Array!IntervalIndex activeVirtual;
Undocumented in source.
builder
IrBuilder* builder;
Undocumented in source.
context
CompilationContext* context;
Undocumented in source.
fun
FunctionDeclNode* fun;
Undocumented in source.
inactiveFixed
Array!IntervalIndex inactiveFixed;
Undocumented in source.
inactiveVirtual
Array!IntervalIndex inactiveVirtual;
Undocumented in source.
lir
IrFunction* lir;
Undocumented in source.
livePtr
LivenessInfo* livePtr;
Undocumented in source.
pendingMoveSplits
Array!IntervalIndex pendingMoveSplits;
Undocumented in source.
physRegs
PhysRegisters physRegs;
Undocumented in source.
scratchSpillSlot
IrIndex scratchSpillSlot;
Undocumented in source.
unhandled
IntervalPriorityQueue unhandled;
Undocumented in source.
vregState
VregState[] vregState;
Undocumented in source.

Meta