changeset 8632:c50bfedfb704

Merge.
author Doug Simon <doug.simon@oracle.com>
date Thu, 04 Apr 2013 14:29:07 +0200
parents a5ad23f6f9ca (current diff) 33c8ff9c5cc1 (diff)
children c4bca84d86d7
files
diffstat 11 files changed, 78 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java	Thu Apr 04 14:29:07 2013 +0200
@@ -22,8 +22,6 @@
  */
 package com.oracle.graal.compiler.test;
 
-import static org.junit.Assert.*;
-
 import java.io.*;
 import java.lang.reflect.*;
 
@@ -35,38 +33,39 @@
 public class ProfilingInfoTest extends GraalCompilerTest {
 
     private static final int N = 100;
+    private static final double DELTA = 1d / Integer.MAX_VALUE;
 
     @Test
     public void testBranchTakenProbability() {
         ProfilingInfo info = profile("branchProbabilitySnippet", 0);
-        assertEquals(0.0, info.getBranchTakenProbability(1));
-        assertEquals(N, info.getExecutionCount(1));
-        assertEquals(-1.0, info.getBranchTakenProbability(8));
-        assertEquals(0, info.getExecutionCount(8));
+        Assert.assertEquals(0.0, info.getBranchTakenProbability(1), DELTA);
+        Assert.assertEquals(N, info.getExecutionCount(1));
+        Assert.assertEquals(-1.0, info.getBranchTakenProbability(8), DELTA);
+        Assert.assertEquals(0, info.getExecutionCount(8));
 
         info = profile("branchProbabilitySnippet", 1);
-        assertEquals(1.0, info.getBranchTakenProbability(1));
-        assertEquals(N, info.getExecutionCount(1));
-        assertEquals(0.0, info.getBranchTakenProbability(8));
-        assertEquals(N, info.getExecutionCount(8));
+        Assert.assertEquals(1.0, info.getBranchTakenProbability(1), DELTA);
+        Assert.assertEquals(N, info.getExecutionCount(1));
+        Assert.assertEquals(0.0, info.getBranchTakenProbability(8), DELTA);
+        Assert.assertEquals(N, info.getExecutionCount(8));
 
         info = profile("branchProbabilitySnippet", 2);
-        assertEquals(1.0, info.getBranchTakenProbability(1));
-        assertEquals(N, info.getExecutionCount(1));
-        assertEquals(1.0, info.getBranchTakenProbability(8));
-        assertEquals(N, info.getExecutionCount(8));
+        Assert.assertEquals(1.0, info.getBranchTakenProbability(1), DELTA);
+        Assert.assertEquals(N, info.getExecutionCount(1));
+        Assert.assertEquals(1.0, info.getBranchTakenProbability(8), DELTA);
+        Assert.assertEquals(N, info.getExecutionCount(8));
 
         continueProfiling(3 * N, "branchProbabilitySnippet", 0);
-        assertEquals(0.25, info.getBranchTakenProbability(1));
-        assertEquals(4 * N, info.getExecutionCount(1));
-        assertEquals(1.0, info.getBranchTakenProbability(8));
-        assertEquals(N, info.getExecutionCount(8));
+        Assert.assertEquals(0.25, info.getBranchTakenProbability(1), DELTA);
+        Assert.assertEquals(4 * N, info.getExecutionCount(1));
+        Assert.assertEquals(1.0, info.getBranchTakenProbability(8), DELTA);
+        Assert.assertEquals(N, info.getExecutionCount(8));
 
         resetProfile("branchProbabilitySnippet");
-        assertEquals(-1.0, info.getBranchTakenProbability(1));
-        assertEquals(0, info.getExecutionCount(1));
-        assertEquals(-1.0, info.getBranchTakenProbability(8));
-        assertEquals(0, info.getExecutionCount(8));
+        Assert.assertEquals(-1.0, info.getBranchTakenProbability(1), DELTA);
+        Assert.assertEquals(0, info.getExecutionCount(1));
+        Assert.assertEquals(-1.0, info.getBranchTakenProbability(8), DELTA);
+        Assert.assertEquals(0, info.getExecutionCount(8));
     }
 
     public static int branchProbabilitySnippet(int value) {
@@ -82,16 +81,16 @@
     @Test
     public void testSwitchProbabilities() {
         ProfilingInfo info = profile("switchProbabilitySnippet", 0);
-        assertEquals(new double[]{1.0, 0.0, 0.0}, info.getSwitchProbabilities(1));
+        Assert.assertArrayEquals(new double[]{1.0, 0.0, 0.0}, info.getSwitchProbabilities(1), DELTA);
 
         info = profile("switchProbabilitySnippet", 1);
-        assertEquals(new double[]{0.0, 1.0, 0.0}, info.getSwitchProbabilities(1));
+        Assert.assertArrayEquals(new double[]{0.0, 1.0, 0.0}, info.getSwitchProbabilities(1), DELTA);
 
         info = profile("switchProbabilitySnippet", 2);
-        assertEquals(new double[]{0.0, 0.0, 1.0}, info.getSwitchProbabilities(1));
+        Assert.assertArrayEquals(new double[]{0.0, 0.0, 1.0}, info.getSwitchProbabilities(1), DELTA);
 
         resetProfile("switchProbabilitySnippet");
-        assertNull(info.getSwitchProbabilities(1));
+        Assert.assertNull(info.getSwitchProbabilities(1));
     }
 
     public static int switchProbabilitySnippet(int value) {
@@ -147,66 +146,66 @@
 
         ProfilingInfo info = profile(methodName, "ABC");
         JavaTypeProfile typeProfile = info.getTypeProfile(bci);
-        assertEquals(0.0, typeProfile.getNotRecordedProbability());
-        assertEquals(1, typeProfile.getTypes().length);
-        assertEquals(stringType, typeProfile.getTypes()[0].getType());
-        assertEquals(1.0, typeProfile.getTypes()[0].getProbability());
+        Assert.assertEquals(0.0, typeProfile.getNotRecordedProbability(), DELTA);
+        Assert.assertEquals(1, typeProfile.getTypes().length);
+        Assert.assertEquals(stringType, typeProfile.getTypes()[0].getType());
+        Assert.assertEquals(1.0, typeProfile.getTypes()[0].getProbability(), DELTA);
 
         continueProfiling(methodName, new StringBuilder());
         typeProfile = info.getTypeProfile(bci);
-        assertEquals(0.0, typeProfile.getNotRecordedProbability());
-        assertEquals(2, typeProfile.getTypes().length);
-        assertEquals(stringType, typeProfile.getTypes()[0].getType());
-        assertEquals(stringBuilderType, typeProfile.getTypes()[1].getType());
-        assertEquals(0.5, typeProfile.getTypes()[0].getProbability());
-        assertEquals(0.5, typeProfile.getTypes()[1].getProbability());
+        Assert.assertEquals(0.0, typeProfile.getNotRecordedProbability(), DELTA);
+        Assert.assertEquals(2, typeProfile.getTypes().length);
+        Assert.assertEquals(stringType, typeProfile.getTypes()[0].getType());
+        Assert.assertEquals(stringBuilderType, typeProfile.getTypes()[1].getType());
+        Assert.assertEquals(0.5, typeProfile.getTypes()[0].getProbability(), DELTA);
+        Assert.assertEquals(0.5, typeProfile.getTypes()[1].getProbability(), DELTA);
 
         resetProfile(methodName);
         typeProfile = info.getTypeProfile(bci);
-        assertNull(typeProfile);
+        Assert.assertNull(typeProfile);
     }
 
     @Test
     public void testExceptionSeen() {
         // NullPointerException
         ProfilingInfo info = profile("nullPointerExceptionSnippet", 5);
-        assertEquals(TriState.FALSE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(1));
 
         info = profile("nullPointerExceptionSnippet", (Object) null);
-        assertEquals(TriState.TRUE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.TRUE, info.getExceptionSeen(1));
 
         resetProfile("nullPointerExceptionSnippet");
-        assertEquals(TriState.FALSE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(1));
 
         // ArrayOutOfBoundsException
         info = profile("arrayIndexOutOfBoundsExceptionSnippet", new int[1]);
-        assertEquals(TriState.FALSE, info.getExceptionSeen(2));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(2));
 
         info = profile("arrayIndexOutOfBoundsExceptionSnippet", new int[0]);
-        assertEquals(TriState.TRUE, info.getExceptionSeen(2));
+        Assert.assertEquals(TriState.TRUE, info.getExceptionSeen(2));
 
         resetProfile("arrayIndexOutOfBoundsExceptionSnippet");
-        assertEquals(TriState.FALSE, info.getExceptionSeen(2));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(2));
 
         // CheckCastException
         info = profile("checkCastExceptionSnippet", "ABC");
-        assertEquals(TriState.FALSE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(1));
 
         info = profile("checkCastExceptionSnippet", 5);
-        assertEquals(TriState.TRUE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.TRUE, info.getExceptionSeen(1));
 
         resetProfile("checkCastExceptionSnippet");
-        assertEquals(TriState.FALSE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(1));
 
         // Invoke with exception
         info = profile("invokeWithExceptionSnippet", false);
-        assertEquals(TriState.FALSE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(1));
 
         info = profile("invokeWithExceptionSnippet", true);
-        assertEquals(TriState.TRUE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.TRUE, info.getExceptionSeen(1));
 
         resetProfile("invokeWithExceptionSnippet");
-        assertEquals(TriState.FALSE, info.getExceptionSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getExceptionSeen(1));
     }
 
     public static int nullPointerExceptionSnippet(Object obj) {
@@ -252,19 +251,19 @@
     @Test
     public void testNullSeen() {
         ProfilingInfo info = profile("instanceOfSnippet", 1);
-        assertEquals(TriState.FALSE, info.getNullSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getNullSeen(1));
 
         continueProfiling("instanceOfSnippet", "ABC");
-        assertEquals(TriState.FALSE, info.getNullSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getNullSeen(1));
 
         continueProfiling("instanceOfSnippet", (Object) null);
-        assertEquals(TriState.TRUE, info.getNullSeen(1));
+        Assert.assertEquals(TriState.TRUE, info.getNullSeen(1));
 
         continueProfiling("instanceOfSnippet", 0.0);
-        assertEquals(TriState.TRUE, info.getNullSeen(1));
+        Assert.assertEquals(TriState.TRUE, info.getNullSeen(1));
 
         resetProfile("instanceOfSnippet");
-        assertEquals(TriState.FALSE, info.getNullSeen(1));
+        Assert.assertEquals(TriState.FALSE, info.getNullSeen(1));
     }
 
     private ProfilingInfo profile(String methodName, Object... args) {
@@ -292,7 +291,7 @@
             try {
                 method.invoke(null, args);
             } catch (Throwable e) {
-                fail("method should not throw an exception: " + e.toString());
+                Assert.fail("method should not throw an exception: " + e.toString());
             }
         }
 
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java	Thu Apr 04 14:29:07 2013 +0200
@@ -202,7 +202,7 @@
             Assumptions assumptions = new Assumptions(false);
             new InliningPhase(runtime(), null, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph);
             new DeadCodeEliminationPhase().apply(graph);
-            new PartialEscapeAnalysisPhase(runtime(), assumptions, iterativeEscapeAnalysis).apply(graph);
+            new PartialEscapeAnalysisPhase(runtime(), assumptions, iterativeEscapeAnalysis, false).apply(graph);
             Assert.assertEquals(1, graph.getNodes(ReturnNode.class).count());
             ReturnNode returnNode = graph.getNodes(ReturnNode.class).first();
             if (expectedConstantResult != null) {
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java	Thu Apr 04 14:29:07 2013 +0200
@@ -101,7 +101,7 @@
     private void processMethod(final String snippet) {
         graph = parse(snippet);
         new ComputeProbabilityPhase().apply(graph);
-        GraalOptions.PEAReadCache = true;
-        new IterativeInliningPhase(runtime(), new Assumptions(false), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph);
+        GraalOptions.OptEarlyReadElimination = true;
+        new IterativeInliningPhase(runtime(), new Assumptions(false), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL, false).apply(graph);
     }
 }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java	Thu Apr 04 14:29:07 2013 +0200
@@ -204,7 +204,6 @@
         new ComputeProbabilityPhase().apply(graph);
         Assumptions assumptions = new Assumptions(false);
         new InliningPhase(runtime(), null, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph);
-        GraalOptions.PEAReadCache = true;
-        new PartialEscapeAnalysisPhase(runtime(), assumptions, false).apply(graph);
+        new PartialEscapeAnalysisPhase(runtime(), assumptions, false, true).apply(graph);
     }
 }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java	Thu Apr 04 14:29:07 2013 +0200
@@ -153,7 +153,7 @@
             new InliningPhase(runtime(), null, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph);
             new DeadCodeEliminationPhase().apply(graph);
             new CanonicalizerPhase(runtime(), assumptions).apply(graph);
-            new PartialEscapeAnalysisPhase(runtime(), assumptions, false).apply(graph);
+            new PartialEscapeAnalysisPhase(runtime(), assumptions, false, false).apply(graph);
 
             new CullFrameStatesPhase().apply(graph);
             new DeadCodeEliminationPhase().apply(graph);
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Thu Apr 04 14:29:07 2013 +0200
@@ -122,7 +122,7 @@
 
         if (GraalOptions.Inline && !plan.isPhaseDisabled(InliningPhase.class)) {
             if (GraalOptions.IterativeInlining) {
-                new IterativeInliningPhase(runtime, assumptions, cache, plan, optimisticOpts).apply(graph);
+                new IterativeInliningPhase(runtime, assumptions, cache, plan, optimisticOpts, GraalOptions.OptEarlyReadElimination).apply(graph);
             } else {
                 new InliningPhase(runtime, null, assumptions, cache, plan, optimisticOpts).apply(graph);
                 new DeadCodeEliminationPhase().apply(graph);
@@ -153,7 +153,7 @@
         }
 
         if (GraalOptions.PartialEscapeAnalysis && !plan.isPhaseDisabled(PartialEscapeAnalysisPhase.class)) {
-            new PartialEscapeAnalysisPhase(runtime, assumptions, true).apply(graph);
+            new PartialEscapeAnalysisPhase(runtime, assumptions, true, GraalOptions.OptEarlyReadElimination).apply(graph);
         }
 
         if (GraalOptions.OptConvertDeoptsToGuards) {
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java	Thu Apr 04 14:29:07 2013 +0200
@@ -68,7 +68,6 @@
     public static int     EscapeAnalysisIterations           = 2;
     public static String  EscapeAnalyzeOnly                  = null;
     public static int     MaximumEscapeAnalysisArrayLength   = 32;
-    public static boolean PEAReadCache                       = ____;
     public static boolean PEAInliningHints                   = ____;
 
     public static double  TailDuplicationProbability         = 0.5;
@@ -191,6 +190,7 @@
     public static boolean OptAssumptions                     = true;
     public static boolean OptConvertDeoptsToGuards           = true;
     public static boolean OptReadElimination                 = true;
+    public static boolean OptEarlyReadElimination            = true;
     public static boolean OptCanonicalizer                   = true;
     public static boolean OptScheduleOutOfLoops              = true;
     public static boolean OptEliminateGuards                 = true;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java	Thu Apr 04 14:29:07 2013 +0200
@@ -40,13 +40,15 @@
     private final Assumptions assumptions;
     private final GraphCache cache;
     private final OptimisticOptimizations optimisticOpts;
+    private final boolean readElimination;
 
-    public IterativeInliningPhase(GraalCodeCacheProvider runtime, Assumptions assumptions, GraphCache cache, PhasePlan plan, OptimisticOptimizations optimisticOpts) {
+    public IterativeInliningPhase(GraalCodeCacheProvider runtime, Assumptions assumptions, GraphCache cache, PhasePlan plan, OptimisticOptimizations optimisticOpts, boolean readElimination) {
         this.runtime = runtime;
         this.assumptions = assumptions;
         this.cache = cache;
         this.plan = plan;
         this.optimisticOpts = optimisticOpts;
+        this.readElimination = readElimination;
     }
 
     public static final void trace(String format, Object... obj) {
@@ -69,7 +71,7 @@
                 @Override
                 public Boolean call() {
                     boolean progress = false;
-                    PartialEscapeAnalysisPhase ea = new PartialEscapeAnalysisPhase(runtime, assumptions, false);
+                    PartialEscapeAnalysisPhase ea = new PartialEscapeAnalysisPhase(runtime, assumptions, false, readElimination);
                     ea.apply(graph);
                     progress |= ea.hasChanged();
 
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java	Thu Apr 04 14:29:07 2013 +0200
@@ -47,13 +47,15 @@
     private final Assumptions assumptions;
     private CustomCanonicalizer customCanonicalizer;
     private final boolean iterative;
+    private final boolean readElimination;
 
     private boolean changed;
 
-    public PartialEscapeAnalysisPhase(MetaAccessProvider runtime, Assumptions assumptions, boolean iterative) {
+    public PartialEscapeAnalysisPhase(MetaAccessProvider runtime, Assumptions assumptions, boolean iterative, boolean readElimination) {
         this.runtime = runtime;
         this.assumptions = assumptions;
         this.iterative = iterative;
+        this.readElimination = readElimination;
     }
 
     public boolean hasChanged() {
@@ -76,7 +78,7 @@
             return;
         }
 
-        if (!GraalOptions.PEAReadCache) {
+        if (!readElimination) {
             boolean analyzableNodes = false;
             for (Node node : graph.getNodes()) {
                 if (node instanceof VirtualizableAllocation) {
@@ -127,9 +129,11 @@
             });
         }
 
-        for (Node node : graph.getNodes()) {
-            if (node instanceof LoadFieldNode) {
-                DynamicCounterNode.addCounterBefore("load non-elim", 1, false, (FixedNode) node);
+        if (DynamicCounterNode.enabled && readElimination) {
+            for (Node node : graph.getNodes()) {
+                if (node instanceof LoadFieldNode) {
+                    DynamicCounterNode.addCounterBefore("load non-elim", 1, false, (FixedNode) node);
+                }
             }
         }
     }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java	Thu Apr 04 14:28:34 2013 +0200
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java	Thu Apr 04 14:29:07 2013 +0200
@@ -110,7 +110,7 @@
                 trace("%s ", node);
                 deleted = false;
             }
-            if (GraalOptions.PEAReadCache) {
+            if (GraalOptions.OptEarlyReadElimination) {
                 if (!deleted) {
                     if (node instanceof StoreFieldNode) {
                         METRIC_STOREFIELD_RECORDED.increment();
--- a/mx/commands.py	Thu Apr 04 14:28:34 2013 +0200
+++ b/mx/commands.py	Thu Apr 04 14:29:07 2013 +0200
@@ -534,6 +534,8 @@
         buildSuffix = ''
     elif vm == 'client':
         buildSuffix = '1'
+    elif vm == 'server0':
+        return
     else:
         assert vm == 'graal', vm
         buildSuffix = 'graal'