public final class LSStackSlotAllocator extends AllocationPhase implements StackSlotAllocator
StackSlotAllocator
.
Remark: The analysis works under the assumption that a stack slot is no longer live after
its last usage. If an instruction
transfers the raw address of the stack
slot to another location, e.g. a registers, and this location is referenced later on, the
usage
of the stack slot must be marked with the
LIRInstruction.OperandFlag.UNINITIALIZED
. Otherwise the stack slot might be reused and its content
destroyed.
Modifier and Type | Class and Description |
---|---|
private static class |
LSStackSlotAllocator.Allocator |
static class |
LSStackSlotAllocator.Options |
AllocationPhase.AllocationContext
Modifier and Type | Field and Description |
---|---|
private static DebugTimer |
AllocateSlotsTimer |
private static DebugTimer |
AssignSlotsTimer |
private static DebugTimer |
BuildIntervalsTimer |
private static DebugTimer |
MainTimer |
private static DebugTimer |
NumInstTimer |
private static DebugTimer |
VerifyIntervalsTimer |
allocatedFramesize, allocatedSlots, reusedSlots, virtualFramesize
Constructor and Description |
---|
LSStackSlotAllocator() |
Modifier and Type | Method and Description |
---|---|
void |
allocateStackSlots(FrameMapBuilderTool builder,
LIRGenerationResult res) |
protected <B extends AbstractBlockBase<B>> |
run(TargetDescription target,
LIRGenerationResult lirGenRes,
List<B> codeEmittingOrder,
List<B> linearScanOrder,
LIRGeneratorTool.SpillMoveFactory spillMoveFactory,
RegisterAllocationConfig registerAllocationConfig) |
run
apply, apply, createName, getName
private static final DebugTimer MainTimer
private static final DebugTimer NumInstTimer
private static final DebugTimer BuildIntervalsTimer
private static final DebugTimer VerifyIntervalsTimer
private static final DebugTimer AllocateSlotsTimer
private static final DebugTimer AssignSlotsTimer
public LSStackSlotAllocator()
protected <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, LIRGeneratorTool.SpillMoveFactory spillMoveFactory, RegisterAllocationConfig registerAllocationConfig)
run
in class AllocationPhase
public void allocateStackSlots(FrameMapBuilderTool builder, LIRGenerationResult res)
allocateStackSlots
in interface StackSlotAllocator