changeset 19199:751489b93b2c

emitLIR: only pass LIRGenerationResult to LocationMarker, EdgeMoveOptimizer, RedundantMoveElimination, NullCheckOptimizer.
author Josef Eisl <josef.eisl@jku.at>
date Fri, 06 Feb 2015 10:59:56 +0100
parents d599eeab1b53
children 7f827cc5e4f7
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LocationMarker.java
diffstat 6 files changed, 23 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Fri Feb 06 12:44:50 2015 +0100
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Fri Feb 06 10:59:56 2015 +0100
@@ -163,7 +163,7 @@
                 try (Scope s1 = Debug.scope("MarkLocations")) {
                     if (backend.shouldAllocateRegisters()) {
                         // currently we mark locations only if we do register allocation
-                        LocationMarker.markLocations(lir, lirGenRes.getFrameMap());
+                        LocationMarker.markLocations(lirGenRes);
                     }
                 }
 
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Feb 06 12:44:50 2015 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Feb 06 10:59:56 2015 +0100
@@ -367,17 +367,17 @@
             try (Scope s1 = Debug.scope("MarkLocations")) {
                 if (backend.shouldAllocateRegisters()) {
                     // currently we mark locations only if we do register allocation
-                    LocationMarker.markLocations(lir, lirGenRes.getFrameMap());
+                    LocationMarker.markLocations(lirGenRes);
                 }
             }
 
             try (Scope s = Debug.scope("ControlFlowOptimizations")) {
-                EdgeMoveOptimizer.optimize(lir);
+                EdgeMoveOptimizer.optimize(lirGenRes);
                 ControlFlowOptimizer.optimize(lir, codeEmittingOrder);
                 if (lirGen.canEliminateRedundantMoves()) {
-                    RedundantMoveElimination.optimize(lir, frameMapBuilder);
+                    RedundantMoveElimination.optimize(lirGenRes);
                 }
-                NullCheckOptimizer.optimize(lir, target.implicitNullCheckLimit);
+                NullCheckOptimizer.optimize(target, lirGenRes);
 
                 Debug.dump(lir, "After control flow optimization");
             } catch (Throwable e) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java	Fri Feb 06 12:44:50 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java	Fri Feb 06 10:59:56 2015 +0100
@@ -26,6 +26,7 @@
 
 import com.oracle.graal.compiler.common.cfg.*;
 import com.oracle.graal.lir.StandardOp.MoveOp;
+import com.oracle.graal.lir.gen.*;
 
 /**
  * This class optimizes moves, particularly those that result from eliminating SSA form.
@@ -50,7 +51,8 @@
     /**
      * Optimizes moves on block edges.
      */
-    public static void optimize(LIR ir) {
+    public static void optimize(LIRGenerationResult lirGenRes) {
+        LIR ir = lirGenRes.getLIR();
         EdgeMoveOptimizer optimizer = new EdgeMoveOptimizer(ir);
 
         List<? extends AbstractBlock<?>> blockList = ir.linearScanOrder();
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java	Fri Feb 06 12:44:50 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java	Fri Feb 06 10:59:56 2015 +0100
@@ -24,15 +24,18 @@
 
 import java.util.*;
 
+import com.oracle.graal.api.code.*;
 import com.oracle.graal.compiler.common.cfg.*;
 import com.oracle.graal.lir.StandardOp.ImplicitNullCheck;
 import com.oracle.graal.lir.StandardOp.NullCheck;
+import com.oracle.graal.lir.gen.*;
 
 public final class NullCheckOptimizer {
 
-    public static void optimize(LIR ir, int implicitNullCheckLimit) {
+    public static void optimize(TargetDescription target, LIRGenerationResult lirGenRes) {
+        LIR ir = lirGenRes.getLIR();
         List<? extends AbstractBlock<?>> blocks = ir.codeEmittingOrder();
-        NullCheckOptimizer.foldNullChecks(ir, blocks, implicitNullCheckLimit);
+        NullCheckOptimizer.foldNullChecks(ir, blocks, target.implicitNullCheckLimit);
     }
 
     private NullCheckOptimizer() {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java	Fri Feb 06 12:44:50 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java	Fri Feb 06 10:59:56 2015 +0100
@@ -35,15 +35,16 @@
 import com.oracle.graal.lir.LIRInstruction.OperandMode;
 import com.oracle.graal.lir.StandardOp.MoveOp;
 import com.oracle.graal.lir.framemap.*;
+import com.oracle.graal.lir.gen.*;
 
 /**
  * Removes move instructions, where the destination value is already in place.
  */
 public final class RedundantMoveElimination {
 
-    public static void optimize(LIR lir, FrameMapBuilder frameMapBuilder) {
+    public static void optimize(LIRGenerationResult lirGenRes) {
         RedundantMoveElimination redundantMoveElimination = new RedundantMoveElimination();
-        redundantMoveElimination.doOptimize(lir, frameMapBuilder);
+        redundantMoveElimination.doOptimize(lirGenRes.getLIR(), lirGenRes.getFrameMap());
     }
 
     /**
@@ -103,11 +104,11 @@
     /**
      * The main method doing the elimination of redundant moves.
      */
-    private void doOptimize(LIR lir, FrameMapBuilder frameMapBuilder) {
+    private void doOptimize(LIR lir, FrameMap frameMap) {
 
         try (Indent indent = Debug.logAndIndent("eliminate redundant moves")) {
 
-            callerSaveRegs = frameMapBuilder.getRegisterConfig().getCallerSaveRegisters();
+            callerSaveRegs = frameMap.getRegisterConfig().getCallerSaveRegisters();
 
             initBlockData(lir);
 
@@ -115,7 +116,7 @@
             // Unallocatable registers should never be optimized.
             eligibleRegs = new int[numRegs];
             Arrays.fill(eligibleRegs, -1);
-            for (Register reg : frameMapBuilder.getRegisterConfig().getAllocatableRegisters()) {
+            for (Register reg : frameMap.getRegisterConfig().getAllocatableRegisters()) {
                 if (reg.number < numRegs) {
                     eligibleRegs[reg.number] = reg.number;
                 }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LocationMarker.java	Fri Feb 06 12:44:50 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LocationMarker.java	Fri Feb 06 10:59:56 2015 +0100
@@ -34,6 +34,7 @@
 import com.oracle.graal.lir.LIRInstruction.OperandFlag;
 import com.oracle.graal.lir.LIRInstruction.OperandMode;
 import com.oracle.graal.lir.framemap.*;
+import com.oracle.graal.lir.gen.*;
 import com.oracle.graal.options.*;
 
 public final class LocationMarker {
@@ -49,8 +50,8 @@
      * Mark all live references for a frame state. The frame state use this information to build the
      * OOP maps.
      */
-    public static void markLocations(LIR lir, FrameMap frameMap) {
-        new LocationMarker(lir, frameMap).build();
+    public static void markLocations(LIRGenerationResult lirGenRes) {
+        new LocationMarker(lirGenRes.getLIR(), lirGenRes.getFrameMap()).build();
     }
 
     private final LIR lir;
@@ -218,4 +219,5 @@
     private RegisterAttributes attributes(Register reg) {
         return registerAttributes[reg.number];
     }
+
 }