changeset 19208:81358265e0e0

Make LowLevelLowTierPhase generic.
author Josef Eisl <josef.eisl@jku.at>
date Fri, 06 Feb 2015 19:43:08 +0100
parents 06a0ca03236f
children 1e3b5204776f
files 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/phases/LowLevelLowTierPhase.java
diffstat 5 files changed, 11 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Feb 06 19:36:07 2015 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Feb 06 19:43:08 2015 +0100
@@ -387,13 +387,13 @@
         }
 
         try (Scope s = Debug.scope("LowTier")) {
-            LowLevelLowTierPhase.Context c = new LowLevelLowTierPhase.Context();
-            new EdgeMoveOptimizer().apply(target, lirGenRes, c);
+            LowLevelLowTierPhase.Context<T> c = new LowLevelLowTierPhase.Context<>();
+            new EdgeMoveOptimizer<T>().apply(target, lirGenRes, c);
             ControlFlowOptimizer.optimize(lir, codeEmittingOrder);
             if (lirGen.canEliminateRedundantMoves()) {
-                new RedundantMoveElimination().apply(target, lirGenRes, c);
+                new RedundantMoveElimination<T>().apply(target, lirGenRes, c);
             }
-            new NullCheckOptimizer().apply(target, lirGenRes, c);
+            new NullCheckOptimizer<T>().apply(target, lirGenRes, c);
 
             Debug.dump(lir, "After control flow optimization");
         }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java	Fri Feb 06 19:36:07 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java	Fri Feb 06 19:43:08 2015 +0100
@@ -48,7 +48,7 @@
  * Because this optimization works best when a block contains only a few moves, it has a huge impact
  * on the number of blocks that are totally empty.
  */
-public final class EdgeMoveOptimizer extends LowLevelLowTierPhase {
+public final class EdgeMoveOptimizer<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     @Override
     protected void run(TargetDescription target, LIRGenerationResult lirGenRes) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java	Fri Feb 06 19:36:07 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java	Fri Feb 06 19:43:08 2015 +0100
@@ -31,7 +31,7 @@
 import com.oracle.graal.lir.gen.*;
 import com.oracle.graal.lir.phases.*;
 
-public final class NullCheckOptimizer extends LowLevelLowTierPhase {
+public final class NullCheckOptimizer<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     @Override
     protected void run(TargetDescription target, LIRGenerationResult lirGenRes) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java	Fri Feb 06 19:36:07 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java	Fri Feb 06 19:43:08 2015 +0100
@@ -41,7 +41,7 @@
 /**
  * Removes move instructions, where the destination value is already in place.
  */
-public final class RedundantMoveElimination extends LowLevelLowTierPhase {
+public final class RedundantMoveElimination<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     @Override
     protected void run(TargetDescription target, LIRGenerationResult lirGenRes) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java	Fri Feb 06 19:36:07 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java	Fri Feb 06 19:43:08 2015 +0100
@@ -23,15 +23,16 @@
 package com.oracle.graal.lir.phases;
 
 import com.oracle.graal.api.code.*;
+import com.oracle.graal.compiler.common.cfg.*;
 import com.oracle.graal.lir.gen.*;
 
-public abstract class LowLevelLowTierPhase extends LowLevelPhase<LowLevelLowTierPhase.Context> {
+public abstract class LowLevelLowTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelLowTierPhase.Context<B>> {
 
-    public static final class Context {
+    public static final class Context<B extends AbstractBlock<B>> {
     }
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context context) {
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context<B> context) {
         run(target, lirGenRes);
     }