# HG changeset patch # User Josef Eisl # Date 1436529638 -7200 # Node ID 7ba99f3b28de238ebc38b876cc624fdc41f4996f # Parent 2537256c7f3d54f5d2f7cef82cdae1ec4beb1111 StackMoveOptimizationPhase: append to other PostAllocationOptimizationPhases. diff -r 2537256c7f3d -r 7ba99f3b28de graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64SuitesProvider.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64SuitesProvider.java Fri Jul 10 14:01:43 2015 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64SuitesProvider.java Fri Jul 10 14:00:38 2015 +0200 @@ -38,7 +38,8 @@ public LIRSuites createLIRSuites() { LIRSuites lirSuites = super.createLIRSuites(); if (StackMoveOptimizationPhase.Options.LIROptStackMoveOptimizer.getValue() && GraalOptions.SSA_LIR.getValue()) { - lirSuites.getPostAllocationOptimizationStage().prependPhase(new StackMoveOptimizationPhase()); + /* Note: this phase must be inserted after RedundantMoveElimination */ + lirSuites.getPostAllocationOptimizationStage().appendPhase(new StackMoveOptimizationPhase()); } return lirSuites; } diff -r 2537256c7f3d -r 7ba99f3b28de graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/phases/StackMoveOptimizationPhase.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/phases/StackMoveOptimizationPhase.java Fri Jul 10 14:01:43 2015 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/phases/StackMoveOptimizationPhase.java Fri Jul 10 14:00:38 2015 +0200 @@ -38,6 +38,13 @@ import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.phases.*; +/** + * Replaces sequential {@link AMD64StackMove}s of the same type with a single + * {@link AMD64MultiStackMove} to avoid storing/restoring the scratch register multiple times. + * + * Note: this phase must be inserted after {@link RedundantMoveElimination} phase because + * {@link AMD64MultiStackMove} are not probably detected. + */ public class StackMoveOptimizationPhase extends PostAllocationOptimizationPhase { public static class Options { // @formatter:off