public class StackMoveOptimizationPhase extends PostAllocationOptimizationPhase
AMD64Move.AMD64StackMoves of the same type with a single
AMD64Move.AMD64MultiStackMove to avoid storing/restoring the scratch register multiple times.
Note: this phase must be inserted after RedundantMoveElimination phase because
AMD64Move.AMD64MultiStackMove are not probably detected.| Modifier and Type | Class and Description |
|---|---|
private static class |
StackMoveOptimizationPhase.Closure |
static class |
StackMoveOptimizationPhase.Options |
PostAllocationOptimizationPhase.PostAllocationOptimizationContext| Modifier and Type | Field and Description |
|---|---|
private static DebugMetric |
eliminatedBackup |
| Constructor and Description |
|---|
StackMoveOptimizationPhase() |
| Modifier and Type | Method and Description |
|---|---|
private static AMD64Move.AMD64StackMove |
asStackMove(LIRInstruction inst) |
private static boolean |
isStackMove(LIRInstruction inst) |
protected <B extends AbstractBlockBase<B>> |
run(TargetDescription target,
LIRGenerationResult lirGenRes,
List<B> codeEmittingOrder,
List<B> linearScanOrder,
BenchmarkCounterFactory counterFactory) |
runapply, apply, createName, getNameprivate static final DebugMetric eliminatedBackup
public StackMoveOptimizationPhase()
protected <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, BenchmarkCounterFactory counterFactory)
run in class PostAllocationOptimizationPhaseprivate static AMD64Move.AMD64StackMove asStackMove(LIRInstruction inst)
private static boolean isStackMove(LIRInstruction inst)