public class StackMoveOptimizationPhase extends PostAllocationOptimizationPhase
AMD64Move.AMD64StackMove
s 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) |
run
apply, apply, createName, getName
private 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 PostAllocationOptimizationPhase
private static AMD64Move.AMD64StackMove asStackMove(LIRInstruction inst)
private static boolean isStackMove(LIRInstruction inst)