changeset 21323:3570b7d1a6f9

LinearScan: create factory methods for subr- phases.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 12 May 2015 11:04:25 +0200
parents 73942ac6e650
children 086f931c31ee
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java
diffstat 2 files changed, 32 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java	Tue May 12 10:57:59 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java	Tue May 12 11:04:25 2015 +0200
@@ -1133,7 +1133,7 @@
                  * instruction is a branch, spill moves are inserted before this branch and so the
                  * wrong operand would be returned (spill moves at block boundaries are not
                  * considered in the live ranges of intervals).
-                 * 
+                 *
                  * Solution: use the first opId of the branch target block instead.
                  */
                 final LIRInstruction instr = ir.getLIRforBlock(block).get(ir.getLIRforBlock(block).size() - 1);
@@ -1225,10 +1225,6 @@
         }
     }
 
-    protected LifetimeAnalysis createLifetimeAnalysis() {
-        return new LifetimeAnalysis(this);
-    }
-
     <B extends AbstractBlockBase<B>> void allocate(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, SpillMoveFactory spillMoveFactory) {
 
         /*
@@ -1237,13 +1233,13 @@
         try (Indent indent = Debug.logAndIndent("LinearScan allocate")) {
             AllocationContext context = new AllocationContext(spillMoveFactory);
 
-            createLifetimeAnalysis().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false);
-            new RegisterAllocation().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false);
+            createLifetimeAnalysisPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false);
+            createRegisterAllocationPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false);
 
             if (LinearScan.Options.LSRAOptimizeSpillPosition.getValue()) {
-                new OptimizeSpillPosition(this).apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false);
+                createOptimizeSpillPositionPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false);
             }
-            new ResolveDataFlow().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
+            createResolveDataFlowPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
 
             sortIntervalsAfterAllocation();
 
@@ -1251,8 +1247,8 @@
                 verify();
             }
 
-            new EliminateSpillMove().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
-            new AssignLocations().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
+            createSpillMoveEliminationPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
+            createAssignLocationsPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
 
             if (DetailedAsserts.getValue()) {
                 verifyIntervals();
@@ -1260,6 +1256,30 @@
         }
     }
 
+    protected LifetimeAnalysis createLifetimeAnalysisPhase() {
+        return new LifetimeAnalysis(this);
+    }
+
+    protected RegisterAllocation createRegisterAllocationPhase() {
+        return new RegisterAllocation();
+    }
+
+    protected OptimizeSpillPosition createOptimizeSpillPositionPhase() {
+        return new OptimizeSpillPosition(this);
+    }
+
+    protected ResolveDataFlow createResolveDataFlowPhase() {
+        return new ResolveDataFlow();
+    }
+
+    protected EliminateSpillMove createSpillMoveEliminationPhase() {
+        return new EliminateSpillMove();
+    }
+
+    protected AssignLocations createAssignLocationsPhase() {
+        return new AssignLocations();
+    }
+
     private final class RegisterAllocation extends AllocationPhase {
 
         @Override
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java	Tue May 12 10:57:59 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java	Tue May 12 11:04:25 2015 +0200
@@ -134,7 +134,7 @@
     }
 
     @Override
-    protected LifetimeAnalysis createLifetimeAnalysis() {
+    protected LifetimeAnalysis createLifetimeAnalysisPhase() {
         return new SSALifetimeAnalysis(this);
     }