public final class LinearScanOptimizeSpillPositionPhase extends AllocationPhase
Modifier and Type | Class and Description |
---|---|
private class |
LinearScanOptimizeSpillPositionPhase.IntervalBlockIterator
Iterate over all
blocks of an interval. |
AllocationPhase.AllocationContext
LIRPhase.Options
Modifier and Type | Field and Description |
---|---|
private LinearScan |
allocator |
private static DebugMetric |
betterSpillPos |
private static DebugMetric |
betterSpillPosWithLowerProbability |
Constructor and Description |
---|
LinearScanOptimizeSpillPositionPhase(LinearScan allocator) |
Modifier and Type | Method and Description |
---|---|
private Iterable<AbstractBlockBase<?>> |
blocksForInterval(Interval interval) |
private static AbstractBlockBase<?> |
moveSpillOutOfLoop(AbstractBlockBase<?> defBlock,
AbstractBlockBase<?> spillBlock) |
private void |
optimizeInterval(LIRInsertionBuffer[] insertionBuffers,
Interval interval) |
private void |
optimizeSpillPosition() |
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 DebugMetric betterSpillPos
private static final DebugMetric betterSpillPosWithLowerProbability
private final LinearScan allocator
LinearScanOptimizeSpillPositionPhase(LinearScan allocator)
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
private void optimizeSpillPosition()
private void optimizeInterval(LIRInsertionBuffer[] insertionBuffers, Interval interval)
private Iterable<AbstractBlockBase<?>> blocksForInterval(Interval interval)
private static AbstractBlockBase<?> moveSpillOutOfLoop(AbstractBlockBase<?> defBlock, AbstractBlockBase<?> spillBlock)