# HG changeset patch
# User Doug Simon
# Date 1423645988 -3600
# Node ID 8ab925a6f724e6c76c8cee95d806e734e059d1b8
# Parent ec8402f4e00a47625f47991489c0bf597ae1f7c6
made Assumptions be part of a StructuredGraph
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,8 +22,6 @@
*/
package com.oracle.graal.api.code;
-import static com.oracle.graal.api.meta.MetaUtil.*;
-
import java.io.*;
import java.lang.invoke.*;
import java.util.*;
@@ -193,7 +191,7 @@
@Override
public String toString() {
- return "ConcreteMethod[method=" + method.format("%H.%n(%p)") + ", context=" + context.toJavaName() + ", impl=" + impl.format("%H.%n(%p)") + "]";
+ return "ConcreteMethod[method=" + method.format("%H.%n(%p)%r") + ", context=" + context.toJavaName() + ", impl=" + impl.format("%H.%n(%p)%r") + "]";
}
}
@@ -233,7 +231,7 @@
@Override
public String toString() {
- return "MethodContents[method=" + method.format("%H.%n(%p)") + "]";
+ return "MethodContents[method=" + method.format("%H.%n(%p)%r") + "]";
}
}
@@ -288,9 +286,14 @@
*/
private boolean allowOptimisticAssumptions;
+ public static final boolean ALLOW_OPTIMISTIC_ASSUMPTIONS = true;
+ public static final boolean DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS = false;
+
/**
+ * Creates an object for recording assumptions.
*
- * @param allowOptimisticAssumptions
+ * @param allowOptimisticAssumptions specifies whether {@link OptimisticAssumption}s can be
+ * recorded in this object
*/
public Assumptions(boolean allowOptimisticAssumptions) {
this.allowOptimisticAssumptions = allowOptimisticAssumptions;
@@ -319,11 +322,6 @@
}
@Override
- public String toString() {
- return identityHashCodeString(this);
- }
-
- @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -432,30 +430,35 @@
count++;
}
- public Assumption[] getAssumptions() {
- return list;
+ public Collection getAssumptions() {
+ return Arrays.asList(list).subList(0, count);
+ }
+
+ private Assumptions(Assumptions other) {
+ allowOptimisticAssumptions = other.allowOptimisticAssumptions;
+ list = other.list.clone();
+ count = other.count;
}
+ /**
+ * Gets a deep copy of this object.
+ */
+ public Assumptions copy() {
+ return new Assumptions(this);
+ }
+
+ /**
+ * Copies assumptions recorded by another {@link Assumptions} object into this object.
+ */
public void record(Assumptions assumptions) {
+ assert assumptions != this;
for (int i = 0; i < assumptions.count; i++) {
record(assumptions.list[i]);
}
}
- public void print(PrintStream out) {
- List nonNullList = new ArrayList<>();
- if (list != null) {
- for (int i = 0; i < list.length; ++i) {
- Assumption a = list[i];
- if (a != null) {
- nonNullList.add(a);
- }
- }
- }
-
- out.printf("%d assumptions:%n", nonNullList.size());
- for (Assumption a : nonNullList) {
- out.println(a.toString());
- }
+ @Override
+ public String toString() {
+ return "Assumptions{optimistic=" + allowOptimisticAssumptions + ", assumptions=" + Arrays.asList(list).subList(0, count) + "}";
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/BoxingEliminationTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/BoxingEliminationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/BoxingEliminationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.loop.phases.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.*;
@@ -305,9 +306,8 @@
}
private void processMethod(final String snippet) {
- graph = parseEager(snippet);
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new PartialEscapePhase(false, new CanonicalizerPhase(true)).apply(graph, context);
}
@@ -317,10 +317,8 @@
}
private void compareGraphs(final String snippet, final String referenceSnippet, final boolean loopPeeling, final boolean excludeVirtual) {
- graph = parseEager(snippet);
-
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
canonicalizer.apply(graph, context);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
@@ -334,7 +332,7 @@
new DeadCodeEliminationPhase().apply(graph);
canonicalizer.apply(graph, context);
- StructuredGraph referenceGraph = parseEager(referenceSnippet);
+ StructuredGraph referenceGraph = parseEager(referenceSnippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
new InliningPhase(new CanonicalizerPhase(true)).apply(referenceGraph, context);
new DeadCodeEliminationPhase().apply(referenceGraph);
new CanonicalizerPhase(true).apply(referenceGraph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.debug.DelegatingDebugConfig.Feature.*;
import java.io.*;
@@ -69,7 +70,7 @@
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
graphBuilderSuite.appendPhase(new GraphBuilderPhase(GraphBuilderConfiguration.getEagerDefault()));
- HighTierContext context = new HighTierContext(providers, new Assumptions(false), null, graphBuilderSuite, OptimisticOptimizations.NONE);
+ HighTierContext context = new HighTierContext(providers, null, graphBuilderSuite, OptimisticOptimizations.NONE);
Assume.assumeTrue(VerifyPhase.class.desiredAssertionStatus());
@@ -138,7 +139,7 @@
if (matches(filters, methodName)) {
executor.execute(() -> {
ResolvedJavaMethod method = metaAccess.lookupJavaMethod(m);
- StructuredGraph graph = new StructuredGraph(method);
+ StructuredGraph graph = new StructuredGraph(method, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
try (DebugConfigScope s = Debug.setConfig(new DelegatingDebugConfig().disable(INTERCEPT)); Debug.Scope ds = Debug.scope("CheckingGraph", graph, method)) {
graphBuilderSuite.apply(graph, context);
// update phi stamps
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CompareCanonicalizerTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CompareCanonicalizerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CompareCanonicalizerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,11 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.nodes.calc.*;
import com.oracle.graal.phases.common.*;
@@ -35,8 +35,8 @@
public class CompareCanonicalizerTest extends GraalCompilerTest {
private StructuredGraph getCanonicalizedGraph(String name) {
- StructuredGraph graph = parseEager(name);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), null));
+ StructuredGraph graph = parseEager(name, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
return graph;
}
@@ -48,13 +48,12 @@
@Test
public void testCanonicalComparison() {
- StructuredGraph referenceGraph = parseEager("referenceCanonicalComparison");
+ StructuredGraph referenceGraph = parseEager("referenceCanonicalComparison", DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
for (int i = 1; i < 4; i++) {
- StructuredGraph graph = parseEager("canonicalCompare" + i);
+ StructuredGraph graph = parseEager("canonicalCompare" + i, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
assertEquals(referenceGraph, graph);
}
- Assumptions assumptions = new Assumptions(false);
- new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders()));
for (int i = 1; i < 4; i++) {
StructuredGraph graph = getCanonicalizedGraph("canonicalCompare" + i);
assertEquals(referenceGraph, graph);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.nodes.*;
@@ -90,9 +92,9 @@
@Test
public void testRedundantCompares() {
- StructuredGraph graph = parseEager("testRedundantComparesSnippet");
+ StructuredGraph graph = parseEager("testRedundantComparesSnippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
- PhaseContext context = new PhaseContext(getProviders(), null);
+ PhaseContext context = new PhaseContext(getProviders());
new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
canonicalizer.apply(graph, context);
@@ -113,10 +115,10 @@
@Test
@Ignore
public void testInstanceOfCheckCastLowered() {
- StructuredGraph graph = parseEager("testInstanceOfCheckCastSnippet");
+ StructuredGraph graph = parseEager("testInstanceOfCheckCastSnippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
- PhaseContext context = new PhaseContext(getProviders(), null);
+ PhaseContext context = new PhaseContext(getProviders());
new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
canonicalizer.apply(graph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/DegeneratedLoopsTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/DegeneratedLoopsTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/DegeneratedLoopsTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.nodes.*;
@@ -81,12 +82,12 @@
private void test(final String snippet) {
try (Scope s = Debug.scope("DegeneratedLoopsTest", new DebugDumpScope(snippet))) {
- StructuredGraph graph = parseEager(snippet);
- HighTierContext context = new HighTierContext(getProviders(), new Assumptions(false), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new CanonicalizerPhase(true).apply(graph, context);
Debug.dump(graph, "Graph");
- StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET);
+ StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET, ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(referenceGraph, "ReferenceGraph");
assertEquals(referenceGraph, graph);
} catch (Throwable e) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/EliminateNestedCheckCastsTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/EliminateNestedCheckCastsTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/EliminateNestedCheckCastsTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.nodes.*;
@@ -106,11 +107,11 @@
}
private StructuredGraph compileSnippet(final String snippet, final int checkcasts, final int afterCanon) {
- final StructuredGraph graph = parseEager(snippet);
+ final StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
try (Scope s = Debug.scope("NestedCheckCastsTest", graph)) {
Debug.dump(graph, "After parsing: " + snippet);
Assert.assertEquals(checkcasts, graph.getNodes().filter(CheckCastNode.class).count());
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Assert.assertEquals(afterCanon, graph.getNodes().filter(CheckCastNode.class).count());
return graph;
} catch (Throwable e) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FinalizableSubclassTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FinalizableSubclassTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FinalizableSubclassTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,13 +22,14 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.code.Assumptions.Assumption;
import com.oracle.graal.api.code.Assumptions.NoFinalizableSubclass;
import com.oracle.graal.api.meta.*;
@@ -60,26 +61,25 @@
}
}
- private StructuredGraph parseAndProcess(Class> cl, Assumptions assumptions) {
+ private StructuredGraph parseAndProcess(Class> cl, boolean allowsOptimisticAssumptions) {
Constructor>[] constructors = cl.getConstructors();
Assert.assertTrue(constructors.length == 1);
final ResolvedJavaMethod javaMethod = getMetaAccess().lookupJavaMethod(constructors[0]);
- StructuredGraph graph = new StructuredGraph(javaMethod);
+ StructuredGraph graph = new StructuredGraph(javaMethod, allowsOptimisticAssumptions);
GraphBuilderConfiguration conf = GraphBuilderConfiguration.getSnippetDefault();
- new GraphBuilderPhase.Instance(getMetaAccess(), getProviders().getStampProvider(), assumptions, getProviders().getConstantReflection(), conf, OptimisticOptimizations.ALL).apply(graph);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ new GraphBuilderPhase.Instance(getMetaAccess(), getProviders().getStampProvider(), getProviders().getConstantReflection(), conf, OptimisticOptimizations.ALL).apply(graph);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new CanonicalizerPhase(true).apply(graph, context);
return graph;
}
- private void checkForRegisterFinalizeNode(Class> cl, boolean shouldContainFinalizer, boolean optimistic) {
- Assumptions assumptions = new Assumptions(optimistic);
- StructuredGraph graph = parseAndProcess(cl, assumptions);
+ private void checkForRegisterFinalizeNode(Class> cl, boolean shouldContainFinalizer, boolean allowsOptimisticAssumptions) {
+ StructuredGraph graph = parseAndProcess(cl, allowsOptimisticAssumptions);
Assert.assertTrue(graph.getNodes().filter(RegisterFinalizerNode.class).count() == (shouldContainFinalizer ? 1 : 0));
int noFinalizerAssumption = 0;
- for (Assumption a : assumptions) {
+ for (Assumption a : graph.getAssumptions()) {
if (a instanceof NoFinalizableSubclass) {
noFinalizerAssumption++;
}
@@ -95,13 +95,13 @@
public void test1() throws ClassNotFoundException {
for (int i = 0; i < 2; i++) {
ClassTemplateLoader loader = new ClassTemplateLoader();
- checkForRegisterFinalizeNode(loader.findClass("NoFinalizerEverAAAA"), true, false);
- checkForRegisterFinalizeNode(loader.findClass("NoFinalizerEverAAAA"), false, true);
+ checkForRegisterFinalizeNode(loader.findClass("NoFinalizerEverAAAA"), true, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ checkForRegisterFinalizeNode(loader.findClass("NoFinalizerEverAAAA"), false, ALLOW_OPTIMISTIC_ASSUMPTIONS);
- checkForRegisterFinalizeNode(loader.findClass("NoFinalizerYetAAAA"), false, true);
+ checkForRegisterFinalizeNode(loader.findClass("NoFinalizerYetAAAA"), false, ALLOW_OPTIMISTIC_ASSUMPTIONS);
- checkForRegisterFinalizeNode(loader.findClass("WithFinalizerAAAA"), true, true);
- checkForRegisterFinalizeNode(loader.findClass("NoFinalizerYetAAAA"), true, true);
+ checkForRegisterFinalizeNode(loader.findClass("WithFinalizerAAAA"), true, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ checkForRegisterFinalizeNode(loader.findClass("NoFinalizerYetAAAA"), true, ALLOW_OPTIMISTIC_ASSUMPTIONS);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FloatingReadTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FloatingReadTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FloatingReadTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.graph.*;
@@ -58,8 +59,8 @@
private void test(final String snippet) {
try (Scope s = Debug.scope("FloatingReadTest", new DebugDumpScope(snippet))) {
- StructuredGraph graph = parseEager(snippet);
- PhaseContext context = new PhaseContext(getProviders(), new Assumptions(false));
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ PhaseContext context = new PhaseContext(getProviders());
new LoweringPhase(new CanonicalizerPhase(true), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
new FloatingReadPhase().apply(graph);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.code.CodeUtil.*;
import static com.oracle.graal.compiler.GraalCompiler.*;
import static com.oracle.graal.compiler.common.GraalOptions.*;
@@ -71,7 +72,7 @@
*
* White box tests for Graal compiler transformations use this pattern:
*
- * - Create a graph by {@linkplain #parseEager(String) parsing} a method.
+ * - Create a graph by {@linkplain #parseEager(String, boolean) parsing} a method.
* - Manually modify the graph (e.g. replace a parameter node with a constant).
* - Apply a transformation to the graph.
* - Assert that the transformed graph is equal to an expected graph.
@@ -661,7 +662,7 @@
/**
* Gets installed code for a given method, compiling it first if necessary. The graph is parsed
- * {@link #parseEager(ResolvedJavaMethod) eagerly}.
+ * {@link #parseEager(ResolvedJavaMethod, boolean) eagerly}.
*/
protected InstalledCode getCode(ResolvedJavaMethod method) {
return getCode(method, null);
@@ -735,10 +736,10 @@
* is null.
*
* The default implementation in {@link GraalCompilerTest} is to call
- * {@link #parseEager(ResolvedJavaMethod)}.
+ * {@link #parseEager(ResolvedJavaMethod, boolean)}.
*/
protected StructuredGraph parseForCompile(ResolvedJavaMethod method) {
- return parseEager(method);
+ return parseEager(method, ALLOW_OPTIMISTIC_ASSUMPTIONS);
}
/**
@@ -815,16 +816,16 @@
*
* @param methodName the name of the method in {@code this.getClass()} to be parsed
*/
- protected StructuredGraph parseProfiled(String methodName) {
- return parseProfiled(getResolvedJavaMethod(methodName));
+ protected StructuredGraph parseProfiled(String methodName, boolean allowOptimisticAssumptions) {
+ return parseProfiled(getResolvedJavaMethod(methodName), allowOptimisticAssumptions);
}
/**
* Parses a Java method in {@linkplain GraphBuilderConfiguration#getDefault() default} mode to
* produce a graph.
*/
- protected StructuredGraph parseProfiled(ResolvedJavaMethod m) {
- return parse1(m, getDefaultGraphBuilderSuite());
+ protected StructuredGraph parseProfiled(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
+ return parse1(m, getDefaultGraphBuilderSuite(), allowOptimisticAssumptions);
}
/**
@@ -833,31 +834,31 @@
*
* @param methodName the name of the method in {@code this.getClass()} to be parsed
*/
- protected StructuredGraph parseEager(String methodName) {
- return parseEager(getResolvedJavaMethod(methodName));
+ protected StructuredGraph parseEager(String methodName, boolean allowOptimisticAssumptions) {
+ return parseEager(getResolvedJavaMethod(methodName), allowOptimisticAssumptions);
}
/**
* Parses a Java method in {@linkplain GraphBuilderConfiguration#getEagerDefault() eager} mode
* to produce a graph.
*/
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
- return parse1(m, getCustomGraphBuilderSuite(GraphBuilderConfiguration.getEagerDefault()));
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
+ return parse1(m, getCustomGraphBuilderSuite(GraphBuilderConfiguration.getEagerDefault()), allowOptimisticAssumptions);
}
/**
* Parses a Java method in {@linkplain GraphBuilderConfiguration#getFullDebugDefault() full
* debug} mode to produce a graph.
*/
- protected StructuredGraph parseDebug(ResolvedJavaMethod m) {
- return parse1(m, getCustomGraphBuilderSuite(GraphBuilderConfiguration.getFullDebugDefault()));
+ protected StructuredGraph parseDebug(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
+ return parse1(m, getCustomGraphBuilderSuite(GraphBuilderConfiguration.getFullDebugDefault()), allowOptimisticAssumptions);
}
- private StructuredGraph parse1(ResolvedJavaMethod javaMethod, PhaseSuite graphBuilderSuite) {
+ private StructuredGraph parse1(ResolvedJavaMethod javaMethod, PhaseSuite graphBuilderSuite, boolean allowOptimisticAssumptions) {
assert javaMethod.getAnnotation(Test.class) == null : "shouldn't parse method with @Test annotation: " + javaMethod;
try (Scope ds = Debug.scope("Parsing", javaMethod)) {
- StructuredGraph graph = new StructuredGraph(javaMethod);
- graphBuilderSuite.apply(graph, new HighTierContext(providers, null, null, graphBuilderSuite, OptimisticOptimizations.ALL));
+ StructuredGraph graph = new StructuredGraph(javaMethod, allowOptimisticAssumptions);
+ graphBuilderSuite.apply(graph, new HighTierContext(providers, null, graphBuilderSuite, OptimisticOptimizations.ALL));
return graph;
} catch (Throwable e) {
throw Debug.handle(e);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfCanonicalizerTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfCanonicalizerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfCanonicalizerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,11 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.graph.iterators.NodePredicates.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -180,11 +180,11 @@
}
private void testCombinedIf(String snippet, int count) {
- StructuredGraph graph = parseEager(snippet);
- PhaseContext context = new PhaseContext(getProviders(), new Assumptions(false));
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ PhaseContext context = new PhaseContext(getProviders());
new LoweringPhase(new CanonicalizerPhase(true), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
new FloatingReadPhase().apply(graph);
- MidTierContext midContext = new MidTierContext(getProviders(), new Assumptions(false), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
+ MidTierContext midContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
new GuardLoweringPhase().apply(graph, midContext);
new LoweringPhase(new CanonicalizerPhase(true), LoweringTool.StandardLoweringStage.MID_TIER).apply(graph, midContext);
new ValueAnchorCleanupPhase().apply(graph);
@@ -193,19 +193,19 @@
}
private void test(String snippet) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
ParameterNode param = graph.getNodes(ParameterNode.class).iterator().next();
ConstantNode constant = ConstantNode.forInt(0, graph);
for (Node n : param.usages().filter(isNotA(FrameState.class)).snapshot()) {
n.replaceFirstInput(param, constant);
}
Debug.dump(graph, "Graph");
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
for (FrameState fs : param.usages().filter(FrameState.class).snapshot()) {
fs.replaceFirstInput(param, null);
param.safeDelete();
}
- StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET);
+ StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET, ALLOW_OPTIMISTIC_ASSUMPTIONS);
assertEquals(referenceGraph, graph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,8 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.code.CodeUtil.*;
import static com.oracle.graal.compiler.GraalCompiler.*;
+import static com.oracle.graal.compiler.common.GraalOptions.*;
import static org.junit.Assert.*;
import org.junit.*;
@@ -58,7 +60,7 @@
@Test
public void callInfopoints() {
final ResolvedJavaMethod method = getResolvedJavaMethod("testMethod");
- final StructuredGraph graph = parseEager(method);
+ final StructuredGraph graph = parseEager(method, ALLOW_OPTIMISTIC_ASSUMPTIONS);
CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graph.method(), false);
final CompilationResult cr = compileGraph(graph, cc, graph.method(), getProviders(), getBackend(), getCodeCache().getTarget(), null, getDefaultGraphBuilderSuite(),
OptimisticOptimizations.ALL, getProfilingInfo(graph), null, getSuites(), getLowLevelSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default);
@@ -73,7 +75,7 @@
@Test
public void lineInfopoints() {
final ResolvedJavaMethod method = getResolvedJavaMethod("testMethod");
- final StructuredGraph graph = parseDebug(method);
+ final StructuredGraph graph = parseDebug(method, OptAssumptions.getValue());
int graphLineSPs = 0;
for (FullInfopointNode ipn : graph.getNodes().filter(FullInfopointNode.class)) {
if (ipn.getReason() == InfopointReason.LINE_NUMBER) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.nodes.*;
@@ -112,8 +114,8 @@
}
private StructuredGraph getCanonicalizedGraph(String snippet) {
- StructuredGraph graph = parseEager(snippet);
- new CanonicalizerPhase(false).apply(graph, new PhaseContext(getProviders(), null));
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(false).apply(graph, new PhaseContext(getProviders()));
for (FrameState state : graph.getNodes(FrameState.class).snapshot()) {
state.replaceAtUsages(null);
state.safeDelete();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InvokeExceptionTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InvokeExceptionTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InvokeExceptionTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,11 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.*;
import com.oracle.graal.phases.common.*;
@@ -61,13 +61,12 @@
}
private void test(String snippet) {
- StructuredGraph graph = parseProfiled(snippet);
+ StructuredGraph graph = parseProfiled(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
Map hints = new HashMap<>();
for (Invoke invoke : graph.getInvokes()) {
hints.put(invoke, 1000d);
}
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(hints, new CanonicalizerPhase(true)).apply(graph, context);
new CanonicalizerPhase(true).apply(graph, context);
new DeadCodeEliminationPhase().apply(graph);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InvokeHintsTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InvokeHintsTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InvokeHintsTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.*;
import com.oracle.graal.phases.common.*;
@@ -71,18 +72,17 @@
}
private void test(String snippet) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
Map hints = new HashMap<>();
for (Invoke invoke : graph.getInvokes()) {
hints.put(invoke, 1000d);
}
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(hints, new CanonicalizerPhase(true)).apply(graph, context);
new CanonicalizerPhase(true).apply(graph, context);
new DeadCodeEliminationPhase().apply(graph);
- StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET);
+ StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
assertEquals(referenceGraph, graph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LockEliminationTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LockEliminationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LockEliminationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.nodes.java.*;
@@ -62,7 +63,7 @@
test("testSynchronizedSnippet", new A(), new A());
StructuredGraph graph = getGraph("testSynchronizedSnippet");
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), null));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new LockEliminationPhase().apply(graph);
assertDeepEquals(1, graph.getNodes().filter(MonitorEnterNode.class).count());
assertDeepEquals(1, graph.getNodes().filter(MonitorExitNode.class).count());
@@ -80,7 +81,7 @@
test("testSynchronizedMethodSnippet", new A());
StructuredGraph graph = getGraph("testSynchronizedMethodSnippet");
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), null));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new LockEliminationPhase().apply(graph);
assertDeepEquals(1, graph.getNodes().filter(MonitorEnterNode.class).count());
assertDeepEquals(1, graph.getNodes().filter(MonitorExitNode.class).count());
@@ -88,9 +89,8 @@
private StructuredGraph getGraph(String snippet) {
ResolvedJavaMethod method = getResolvedJavaMethod(snippet);
- StructuredGraph graph = parseEager(method);
- Assumptions assumptions = new Assumptions(true);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager(method, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new CanonicalizerPhase(true).apply(graph, context);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new CanonicalizerPhase(true).apply(graph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LoopUnswitchTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LoopUnswitchTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LoopUnswitchTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.graph.*;
@@ -121,8 +122,8 @@
}
private void test(String snippet, String referenceSnippet) {
- final StructuredGraph graph = parseEager(snippet);
- final StructuredGraph referenceGraph = parseEager(referenceSnippet);
+ final StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ final StructuredGraph referenceGraph = parseEager(referenceSnippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
new LoopUnswitchingPhase().apply(graph);
@@ -134,9 +135,8 @@
((StateSplit) stateSplit).setStateAfter(null);
}
- Assumptions assumptions = new Assumptions(false);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
- new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
+ new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders()));
try (Scope s = Debug.scope("Test", new DebugDumpScope("Test:" + snippet))) {
assertEquals(referenceGraph, graph);
} catch (Throwable e) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.compiler.common.GraalOptions.*;
import static org.junit.Assert.*;
@@ -29,7 +30,6 @@
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.graph.*;
@@ -596,11 +596,10 @@
}
private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode, final SchedulingStrategy schedulingStrategy) {
- final StructuredGraph graph = parseEager(snippet);
+ final StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
try (Scope d = Debug.scope("FloatingReadTest", graph)) {
try (OverrideScope s = OptionValue.override(OptScheduleOutOfLoops, schedulingStrategy == SchedulingStrategy.LATEST_OUT_OF_LOOPS, OptImplicitNullChecks, false)) {
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
canonicalizer.apply(graph, context);
if (mode == TestMode.INLINED_WITHOUT_FRAMESTATES) {
@@ -623,7 +622,7 @@
new FloatingReadPhase().apply(graph);
new RemoveValueProxyPhase().apply(graph);
- MidTierContext midContext = new MidTierContext(getProviders(), assumptions, getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
+ MidTierContext midContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
new GuardLoweringPhase().apply(graph, midContext);
new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.MID_TIER).apply(graph, midContext);
new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.LOW_TIER).apply(graph, midContext);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MergeCanonicalizerTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MergeCanonicalizerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MergeCanonicalizerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.common.*;
@@ -57,9 +58,9 @@
}
private void testReturnCount(String snippet, int returnCount) {
- StructuredGraph graph = parseEager(snippet);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Debug.dump(graph, "Graph");
assertDeepEquals(returnCount, graph.getNodes(ReturnNode.class).count());
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,13 +22,13 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.graph.iterators.NodePredicates.*;
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.graph.iterators.*;
import com.oracle.graal.nodes.*;
@@ -84,7 +84,7 @@
}
private StructuredGraph parseAndProcess(String snippet) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
ParameterNode param = graph.getNodes(ParameterNode.class).first();
if (param != null) {
ConstantNode constant = ConstantNode.forInt(0, graph);
@@ -96,8 +96,7 @@
for (Invoke invoke : graph.getInvokes()) {
hints.put(invoke, 1000d);
}
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(hints, new CanonicalizerPhase(true)).apply(graph, context);
new CanonicalizerPhase(true).apply(graph, context);
new DeadCodeEliminationPhase().apply(graph);
@@ -106,7 +105,7 @@
private void test(String snippet) {
StructuredGraph graph = parseAndProcess(snippet);
- StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET);
+ StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
assertEquals(referenceGraph, graph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/NestedLoopTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/NestedLoopTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/NestedLoopTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.compiler.common.cfg.*;
@@ -145,7 +147,7 @@
}
private void test(String snippet, int rootExits, int nestedExits, int innerExits) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
ControlFlowGraph cfg = ControlFlowGraph.compute(graph, true, true, true, true);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PhiCreationTests.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PhiCreationTests.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PhiCreationTests.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.debug.*;
@@ -40,7 +42,7 @@
@Test
public void test1() {
- StructuredGraph graph = parseEager("test1Snippet");
+ StructuredGraph graph = parseEager("test1Snippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
Assert.assertFalse(graph.getNodes().filter(ValuePhiNode.class).iterator().hasNext());
}
@@ -53,7 +55,7 @@
@Test
public void test2() {
- StructuredGraph graph = parseEager("test2Snippet");
+ StructuredGraph graph = parseEager("test2Snippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
Assert.assertFalse(graph.getNodes().filter(ValuePhiNode.class).iterator().hasNext());
}
@@ -66,7 +68,7 @@
@Test
public void test3() {
- StructuredGraph graph = parseEager("test3Snippet");
+ StructuredGraph graph = parseEager("test3Snippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
Assert.assertFalse(graph.getNodes().filter(ValuePhiNode.class).iterator().hasNext());
}
@@ -82,7 +84,7 @@
@Test
public void test4() {
- StructuredGraph graph = parseEager("test4Snippet");
+ StructuredGraph graph = parseEager("test4Snippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
Assert.assertFalse(graph.getNodes().filter(ValuePhiNode.class).iterator().hasNext());
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.debug.*;
@@ -91,8 +92,8 @@
}
private StructuredGraph compileTestSnippet(final String snippet) {
- StructuredGraph graph = parseEager(snippet);
- PhaseContext context = new PhaseContext(getProviders(), new Assumptions(false));
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ PhaseContext context = new PhaseContext(getProviders());
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
canonicalizer.apply(graph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushThroughIfTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushThroughIfTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushThroughIfTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.nodes.util.*;
@@ -57,21 +58,21 @@
}
private void test(String snippet, String reference) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
for (FrameState fs : graph.getNodes(FrameState.class).snapshot()) {
fs.replaceAtUsages(null);
GraphUtil.killWithUnusedFloatingInputs(fs);
}
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
- StructuredGraph referenceGraph = parseEager(reference);
+ StructuredGraph referenceGraph = parseEager(reference, ALLOW_OPTIMISTIC_ASSUMPTIONS);
for (FrameState fs : referenceGraph.getNodes(FrameState.class).snapshot()) {
fs.replaceAtUsages(null);
GraphUtil.killWithUnusedFloatingInputs(fs);
}
- new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders(), new Assumptions(false)));
+ new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders()));
assertEquals(referenceGraph, graph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReadAfterCheckCastTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReadAfterCheckCastTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReadAfterCheckCastTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.nodes.*;
@@ -81,8 +82,8 @@
try (Scope s = Debug.scope("ReadAfterCheckCastTest", new DebugDumpScope(snippet))) {
// check shape of graph, with lots of assumptions. will probably fail if graph
// structure changes significantly
- StructuredGraph graph = parseEager(snippet);
- PhaseContext context = new PhaseContext(getProviders(), new Assumptions(false));
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ PhaseContext context = new PhaseContext(getProviders());
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
new FloatingReadPhase().apply(graph);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReassociateAndCanonicalTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReassociateAndCanonicalTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReassociateAndCanonicalTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.common.*;
@@ -243,11 +244,10 @@
}
private void test(String test, String ref) {
- StructuredGraph testGraph = parseEager(test);
- Assumptions assumptions = new Assumptions(false);
- new CanonicalizerPhase(true).apply(testGraph, new PhaseContext(getProviders(), assumptions));
- StructuredGraph refGraph = parseEager(ref);
- new CanonicalizerPhase(true).apply(refGraph, new PhaseContext(getProviders(), assumptions));
+ StructuredGraph testGraph = parseEager(test, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(testGraph, new PhaseContext(getProviders()));
+ StructuredGraph refGraph = parseEager(ref, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(refGraph, new PhaseContext(getProviders()));
assertEquals(testGraph, refGraph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ScalarTypeSystemTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ScalarTypeSystemTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ScalarTypeSystemTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.common.*;
@@ -130,12 +131,11 @@
private void test(final String snippet, final String referenceSnippet) {
// No debug scope to reduce console noise for @Test(expected = ...) tests
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
- Assumptions assumptions = new Assumptions(false);
- PhaseContext context = new PhaseContext(getProviders(), assumptions);
+ PhaseContext context = new PhaseContext(getProviders());
new CanonicalizerPhase(true).apply(graph, context);
- StructuredGraph referenceGraph = parseEager(referenceSnippet);
+ StructuredGraph referenceGraph = parseEager(referenceSnippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
assertEquals(referenceGraph, graph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SchedulingTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SchedulingTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SchedulingTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import java.util.*;
@@ -51,7 +52,7 @@
@Test
public void testValueProxyInputs() {
- StructuredGraph graph = parseEager("testValueProxyInputsSnippet");
+ StructuredGraph graph = parseEager("testValueProxyInputsSnippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
for (FrameState fs : graph.getNodes().filter(FrameState.class).snapshot()) {
fs.replaceAtUsages(null);
GraphUtil.killWithUnusedFloatingInputs(fs);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import java.util.*;
@@ -40,7 +41,7 @@
@Test
public void testImplies() {
- StructuredGraph graph = new StructuredGraph();
+ StructuredGraph graph = new StructuredGraph(ALLOW_OPTIMISTIC_ASSUMPTIONS);
AbstractEndNode trueEnd = graph.add(new EndNode());
AbstractEndNode falseEnd = graph.add(new EndNode());
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StampCanonicalizerTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StampCanonicalizerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StampCanonicalizerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.common.*;
@@ -109,8 +110,8 @@
}
private void testZeroReturn(String methodName) {
- StructuredGraph graph = parseEager(methodName);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ StructuredGraph graph = parseEager(methodName, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new DeadCodeEliminationPhase().apply(graph);
assertConstantReturn(graph, 0);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StraighteningTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StraighteningTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StraighteningTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.common.*;
@@ -87,10 +88,10 @@
private void test(final String snippet) {
// No debug scope to reduce console noise for @Test(expected = ...) tests
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
- StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET);
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
+ StructuredGraph referenceGraph = parseEager(REFERENCE_SNIPPET, ALLOW_OPTIMISTIC_ASSUMPTIONS);
assertEquals(referenceGraph, graph);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.compiler.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.io.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodeinfo.*;
@@ -170,20 +171,19 @@
}
private void test(String snippet, String referenceSnippet) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
Debug.dump(graph, "Graph");
- Assumptions assumptions = new Assumptions(false);
/*
* When using FlowSensitiveReductionPhase instead of ConditionalEliminationPhase,
* tail-duplication gets activated thus resulting in a graph with more nodes than the
* reference graph.
*/
- new ConditionalEliminationPhase().apply(graph, new PhaseContext(getProviders(), assumptions));
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new ConditionalEliminationPhase().apply(graph, new PhaseContext(getProviders()));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
// a second canonicalizer is needed to process nested MaterializeNodes
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
- StructuredGraph referenceGraph = parseEager(referenceSnippet);
- new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
+ StructuredGraph referenceGraph = parseEager(referenceSnippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(referenceGraph, new PhaseContext(getProviders()));
assertEquals(referenceGraph, graph);
}
@@ -230,10 +230,9 @@
}
private void testHelper(String snippet, Class clazz) {
- StructuredGraph graph = parseEager(snippet);
- Assumptions assumptions = new Assumptions(false);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Debug.dump(graph, "Graph " + snippet);
Assert.assertFalse("shouldn't have nodes of type " + clazz, graph.getNodes().filter(clazz).iterator().hasNext());
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test.backend;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
import org.junit.*;
@@ -38,7 +40,7 @@
public class AllocatorTest extends BackendTest {
protected void testAllocation(String snippet, final int expectedRegisters, final int expectedRegRegMoves, final int expectedSpillMoves) {
- final StructuredGraph graph = parseEager(snippet);
+ final StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
try (Scope s = Debug.scope("AllocatorTest", graph, graph.method(), getCodeCache())) {
final RegisterStats stats = new RegisterStats(getLIRGenerationResult(graph).getLIR());
try (Scope s2 = Debug.scope("Assertions", stats.lir)) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -23,8 +23,6 @@
package com.oracle.graal.compiler.test.backend;
import static com.oracle.graal.api.code.CodeUtil.*;
-import static com.oracle.graal.compiler.common.GraalOptions.*;
-
import com.oracle.graal.api.code.*;
import com.oracle.graal.api.code.CallingConvention.Type;
import com.oracle.graal.compiler.*;
@@ -47,11 +45,9 @@
}
protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph) {
- final Assumptions assumptions = new Assumptions(OptAssumptions.getValue());
-
SchedulePhase schedule = null;
try (Scope s = Debug.scope("FrontEnd")) {
- schedule = GraalCompiler.emitFrontEnd(getProviders(), getBackend().getTarget(), graph, assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE,
+ schedule = GraalCompiler.emitFrontEnd(getProviders(), getBackend().getTarget(), graph, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE,
graph.method().getProfilingInfo(), null, getSuites());
} catch (Throwable e) {
throw Debug.handle(e);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test.deopt;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.api.code.*;
@@ -51,8 +53,8 @@
@Test
public void test1() {
final ResolvedJavaMethod javaMethod = getResolvedJavaMethod("testMethod");
- final StructuredGraph graph = parseEager(javaMethod);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ final StructuredGraph graph = parseEager(javaMethod, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new DeadCodeEliminationPhase().apply(graph);
for (ConstantNode node : ConstantNode.getConstantNodes(graph)) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/MonitorDeoptTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/MonitorDeoptTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/MonitorDeoptTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,6 +24,8 @@
*/
package com.oracle.graal.compiler.test.deopt;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.api.code.*;
@@ -134,7 +136,7 @@
public void run0() throws Throwable {
ResolvedJavaMethod javaMethod = getResolvedJavaMethod("test");
- StructuredGraph graph = parseEager(javaMethod);
+ StructuredGraph graph = parseEager(javaMethod, ALLOW_OPTIMISTIC_ASSUMPTIONS);
removeLoopSafepoint(graph);
CompilationResult compilationResult = compile(javaMethod, graph);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EATestBase.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EATestBase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EATestBase.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.compiler.test.ea;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.debug.*;
@@ -149,12 +150,11 @@
protected void prepareGraph(String snippet, final boolean iterativeEscapeAnalysis) {
ResolvedJavaMethod method = getResolvedJavaMethod(snippet);
- graph = new StructuredGraph(method);
+ graph = new StructuredGraph(method, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
try (Scope s = Debug.scope(getClass(), graph, method, getCodeCache())) {
- Assumptions assumptions = new Assumptions(false);
- new GraphBuilderPhase.Instance(getMetaAccess(), getProviders().getStampProvider(), assumptions, getProviders().getConstantReflection(), GraphBuilderConfiguration.getEagerDefault(),
+ new GraphBuilderPhase.Instance(getMetaAccess(), getProviders().getStampProvider(), getProviders().getConstantReflection(), GraphBuilderConfiguration.getEagerDefault(),
OptimisticOptimizations.ALL).apply(graph);
- context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new DeadCodeEliminationPhase().apply(graph);
new CanonicalizerPhase(true).apply(graph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EarlyReadEliminationTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EarlyReadEliminationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EarlyReadEliminationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test.ea;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.phases.*;
import com.oracle.graal.phases.common.*;
import com.oracle.graal.phases.common.inlining.*;
@@ -40,9 +41,8 @@
@Override
protected void processMethod(final String snippet) {
- graph = parseEager(snippet);
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ graph = parseEager(getResolvedJavaMethod(snippet), DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new EarlyReadEliminationPhase(new CanonicalizerPhase(true)).apply(graph, context);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,13 +22,13 @@
*/
package com.oracle.graal.compiler.test.ea;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import java.util.concurrent.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.compiler.test.ea.EATestBase.TestClassInt;
import com.oracle.graal.nodes.*;
@@ -84,8 +84,8 @@
}
private void processMethod(final String snippet) {
- graph = parseEager(snippet);
- HighTierContext context = new HighTierContext(getProviders(), new Assumptions(false), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new IterativeInliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,13 +22,13 @@
*/
package com.oracle.graal.compiler.test.ea;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.nodes.java.*;
@@ -244,9 +244,8 @@
}
protected void processMethod(final String snippet) {
- graph = parseEager(snippet);
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
new PartialEscapePhase(false, true, new CanonicalizerPhase(true), null).apply(graph, context);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PoorMansEATest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PoorMansEATest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PoorMansEATest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test.ea;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
@@ -39,7 +40,7 @@
/**
* Tests {@link AbstractNewObjectNode#simplify(com.oracle.graal.graph.spi.SimplifierTool)}.
- *
+ *
*/
public class PoorMansEATest extends GraalCompilerTest {
public static class A {
@@ -59,11 +60,10 @@
private void test(final String snippet) {
try (Scope s = Debug.scope("PoorMansEATest", new DebugDumpScope(snippet))) {
- StructuredGraph graph = parseEager(snippet);
- Assumptions assumptions = new Assumptions(false);
- HighTierContext highTierContext = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext highTierContext = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, highTierContext);
- PhaseContext context = new PhaseContext(getProviders(), assumptions);
+ PhaseContext context = new PhaseContext(getProviders());
new LoweringPhase(new CanonicalizerPhase(true), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
// remove framestates in order to trigger the simplification.
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.compiler.test.inlining;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import org.junit.*;
@@ -231,10 +232,9 @@
private StructuredGraph getGraph(final String snippet, final boolean eagerInfopointMode) {
try (Scope s = Debug.scope("InliningTest", new DebugDumpScope(snippet))) {
ResolvedJavaMethod method = getResolvedJavaMethod(snippet);
- StructuredGraph graph = eagerInfopointMode ? parseDebug(method) : parseEager(method);
+ StructuredGraph graph = eagerInfopointMode ? parseDebug(method, ALLOW_OPTIMISTIC_ASSUMPTIONS) : parseEager(method, ALLOW_OPTIMISTIC_ASSUMPTIONS);
PhaseSuite graphBuilderSuite = eagerInfopointMode ? getCustomGraphBuilderSuite(GraphBuilderConfiguration.getFullDebugDefault()) : getDefaultGraphBuilderSuite();
- Assumptions assumptions = new Assumptions(true);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, graphBuilderSuite, OptimisticOptimizations.ALL);
+ HighTierContext context = new HighTierContext(getProviders(), null, graphBuilderSuite, OptimisticOptimizations.ALL);
Debug.dump(graph, "Graph");
new CanonicalizerPhase(true).apply(graph, context);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.compiler.test.tutorial;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.atomic.*;
@@ -78,9 +80,11 @@
/*
* The graph that is compiled. We leave it empty (no nodes added yet). This means that
- * it will be filled according to the graphBuilderSuite defined below.
+ * it will be filled according to the graphBuilderSuite defined below. We also specify
+ * that we want the compilation to make optimistic assumptions about runtime state such
+ * as the loaded class hierarchy.
*/
- StructuredGraph graph = new StructuredGraph(method);
+ StructuredGraph graph = new StructuredGraph(method, ALLOW_OPTIMISTIC_ASSUMPTIONS);
/*
* The phases used to build the graph. Usually this is just the GraphBuilderPhase. If
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysis.java
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysis.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysis.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.compiler.test.tutorial;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.*;
import com.oracle.graal.debug.*;
@@ -210,7 +211,7 @@
* Build the Graal graph for the method using the bytecode parser provided by Graal.
*/
- StructuredGraph graph = new StructuredGraph(method);
+ StructuredGraph graph = new StructuredGraph(method, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
/*
* Support for graph dumping, IGV uses this information to show the method name of a
* graph.
@@ -236,9 +237,8 @@
* wrong.
*/
OptimisticOptimizations optimisticOpts = OptimisticOptimizations.NONE;
- Assumptions assumptions = new Assumptions(false);
- GraphBuilderPhase.Instance graphBuilder = new GraphBuilderPhase.Instance(metaAccess, stampProvider, assumptions, null, graphBuilderConfig, optimisticOpts);
+ GraphBuilderPhase.Instance graphBuilder = new GraphBuilderPhase.Instance(metaAccess, stampProvider, null, graphBuilderConfig, optimisticOpts);
graphBuilder.apply(graph);
} catch (Throwable ex) {
Debug.handle(ex);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import static com.oracle.graal.compiler.GraalCompiler.Options.*;
import static com.oracle.graal.compiler.MethodFilter.*;
-import static com.oracle.graal.compiler.common.GraalOptions.*;
import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.*;
import java.util.*;
@@ -220,9 +219,9 @@
public static T compile(Request r) {
assert !r.graph.isFrozen();
try (Scope s0 = Debug.scope("GraalCompiler", r.graph, r.providers.getCodeCache())) {
- Assumptions assumptions = new Assumptions(OptAssumptions.getValue());
- SchedulePhase schedule = emitFrontEnd(r.providers, r.target, r.graph, assumptions, r.cache, r.graphBuilderSuite, r.optimisticOpts, r.profilingInfo, r.speculationLog, r.suites);
- emitBackEnd(r.graph, null, r.cc, r.installedCodeOwner, r.backend, r.target, r.compilationResult, r.factory, assumptions, schedule, null, r.lowLevelSuites);
+ SchedulePhase schedule = emitFrontEnd(r.providers, r.target, r.graph, r.cache, r.graphBuilderSuite, r.optimisticOpts, r.profilingInfo, r.speculationLog, r.suites);
+ emitBackEnd(r.graph, null, r.cc, r.installedCodeOwner, r.backend, r.target, r.compilationResult, r.factory, schedule, null, r.lowLevelSuites);
+ } catch (Throwable e) {);
} catch (Throwable e) {
throw Debug.handle(e);
}
@@ -240,14 +239,14 @@
/**
* Builds the graph, optimizes it.
*/
- public static SchedulePhase emitFrontEnd(Providers providers, TargetDescription target, StructuredGraph graph, Assumptions assumptions, Map cache,
+ public static SchedulePhase emitFrontEnd(Providers providers, TargetDescription target, StructuredGraph graph, Map cache,
PhaseSuite graphBuilderSuite, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, SpeculationLog speculationLog, Suites suites) {
try (Scope s = Debug.scope("FrontEnd"); TimerCloseable a = FrontEnd.start()) {
if (speculationLog != null) {
speculationLog.collectFailedSpeculations();
}
- HighTierContext highTierContext = new HighTierContext(providers, assumptions, cache, graphBuilderSuite, optimisticOpts);
+ HighTierContext highTierContext = new HighTierContext(providers, cache, graphBuilderSuite, optimisticOpts);
if (graph.start().next() == null) {
graphBuilderSuite.apply(graph, highTierContext);
new DeadCodeEliminationPhase(Optional).apply(graph);
@@ -258,11 +257,11 @@
suites.getHighTier().apply(graph, highTierContext);
graph.maybeCompress();
- MidTierContext midTierContext = new MidTierContext(providers, assumptions, target, optimisticOpts, profilingInfo, speculationLog);
+ MidTierContext midTierContext = new MidTierContext(providers, target, optimisticOpts, profilingInfo, speculationLog);
suites.getMidTier().apply(graph, midTierContext);
graph.maybeCompress();
- LowTierContext lowTierContext = new LowTierContext(providers, assumptions, target);
+ LowTierContext lowTierContext = new LowTierContext(providers, target);
suites.getLowTier().apply(graph, lowTierContext);
graph.maybeCompress();
@@ -276,13 +275,13 @@
}
public static void emitBackEnd(StructuredGraph graph, Object stub, CallingConvention cc, ResolvedJavaMethod installedCodeOwner, Backend backend,
- TargetDescription target, T compilationResult, CompilationResultBuilderFactory factory, Assumptions assumptions, SchedulePhase schedule, RegisterConfig registerConfig,
+ TargetDescription target, T compilationResult, CompilationResultBuilderFactory factory, SchedulePhase schedule, RegisterConfig registerConfig,
LowLevelSuites lowLevelSuites) {
try (TimerCloseable a = BackEnd.start()) {
LIRGenerationResult lirGen = null;
lirGen = emitLIR(backend, target, schedule, graph, stub, cc, registerConfig, lowLevelSuites);
try (Scope s = Debug.scope("CodeGen", lirGen, lirGen.getLIR())) {
- emitCode(backend, assumptions, lirGen, compilationResult, installedCodeOwner, factory);
+ emitCode(backend, graph.getAssumptions, lirGen, compilationResult, installedCodeOwner, factory);
} catch (Throwable e) {
throw Debug.handle(e);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/CanonicalizerTool.java
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/CanonicalizerTool.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/CanonicalizerTool.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,13 +22,10 @@
*/
package com.oracle.graal.graph.spi;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
public interface CanonicalizerTool {
- Assumptions assumptions();
-
MetaAccessProvider getMetaAccess();
ConstantReflectionProvider getConstantReflection();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.code.CodeUtil.*;
import static com.oracle.graal.compiler.GraalCompiler.*;
import static com.oracle.graal.compiler.common.GraalOptions.*;
@@ -204,7 +205,7 @@
}
private StructuredGraph compile(String test, boolean compileAOT) {
- StructuredGraph graph = parseEager(test);
+ StructuredGraph graph = parseEager(test, ALLOW_OPTIMISTIC_ASSUMPTIONS);
ResolvedJavaMethod method = graph.method();
try (OverrideScope s = OptionValue.override(ImmutableCode, compileAOT)) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ClassSubstitutionsTests.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ClassSubstitutionsTests.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ClassSubstitutionsTests.java Wed Feb 11 10:13:08 2015 +0100
@@ -23,6 +23,7 @@
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import org.junit.*;
@@ -43,7 +44,7 @@
protected StructuredGraph test(final String snippet) {
try (Scope s = Debug.scope("ClassSubstitutionsTest", getMetaAccess().lookupJavaMethod(getMethod(snippet)))) {
- StructuredGraph graph = parseEager(snippet);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
compile(graph.method(), graph);
assertNotInGraph(graph, Invoke.class);
Debug.dump(graph, snippet);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.api.code.*;
@@ -36,7 +38,7 @@
@Test
public void testInstallCodeInvalidation() {
final ResolvedJavaMethod testJavaMethod = getResolvedJavaMethod("foo");
- final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, parseEager("otherFoo"));
+ final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, parseEager("otherFoo", ALLOW_OPTIMISTIC_ASSUMPTIONS));
Assert.assertTrue(nmethod.isValid());
Object result;
try {
@@ -59,7 +61,7 @@
@Test
public void testInstallCodeInvalidationWhileRunning() {
final ResolvedJavaMethod testJavaMethod = getResolvedJavaMethod("foo");
- final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, parseEager("otherFoo"));
+ final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, parseEager("otherFoo", ALLOW_OPTIMISTIC_ASSUMPTIONS));
Object result;
try {
result = nmethod.executeVarargs(nmethod, null, null);
@@ -73,7 +75,7 @@
@Test
public void testInstalledCodeCalledFromCompiledCode() {
final ResolvedJavaMethod testJavaMethod = getResolvedJavaMethod("foo");
- final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, parseEager("otherFoo"));
+ final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, parseEager("otherFoo", ALLOW_OPTIMISTIC_ASSUMPTIONS));
Assert.assertTrue(nmethod.isValid());
try {
for (int i = 0; i < ITERATION_COUNT; ++i) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNodeSubstitutionsTest.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNodeSubstitutionsTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNodeSubstitutionsTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.graph.*;
@@ -35,7 +37,7 @@
@Test
public void test() {
- StructuredGraph graph = new StructuredGraph();
+ StructuredGraph graph = new StructuredGraph(ALLOW_OPTIMISTIC_ASSUMPTIONS);
test("getNodeClass", ConstantNode.forInt(42, graph));
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -68,8 +68,8 @@
}
@Override
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
- StructuredGraph graph = super.parseEager(m);
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
+ StructuredGraph graph = super.parseEager(m, allowOptimisticAssumptions);
if (argsToBind != null) {
Object receiver = isStatic(m.getModifiers()) ? null : this;
Object[] args = argsWithReceiver(receiver, argsToBind);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.debug.internal.MemUseTrackerImpl.*;
import static com.oracle.graal.hotspot.CompileTheWorld.*;
import static com.oracle.graal.hotspot.CompileTheWorld.Options.*;
@@ -164,7 +165,7 @@
private void compileAndTime(String methodName) {
// Parse in eager mode to resolve methods/fields/classes
- parseEager(methodName);
+ parseEager(methodName, ALLOW_OPTIMISTIC_ASSUMPTIONS);
// Warm up and initialize compiler phases used by this compilation
for (int i = 0; i < 10; i++) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.lang.ref.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.*;
import com.oracle.graal.compiler.test.*;
@@ -244,9 +245,9 @@
private void testHelper(final String snippetName, final int expectedBarriers) throws Exception, SecurityException {
ResolvedJavaMethod snippet = getResolvedJavaMethod(snippetName);
try (Scope s = Debug.scope("WriteBarrierAdditionTest", snippet)) {
- StructuredGraph graph = parseEager(snippet);
- HighTierContext highContext = new HighTierContext(getProviders(), new Assumptions(false), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
- MidTierContext midContext = new MidTierContext(getProviders(), new Assumptions(false), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
+ StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext highContext = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ MidTierContext midContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
new NodeIntrinsificationPhase(getProviders(), getSnippetReflection()).apply(graph);
new InliningPhase(new InlineEverythingPolicy(), new CanonicalizerPhase(true)).apply(graph, highContext);
new LoweringPhase(new CanonicalizerPhase(true), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, highContext);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.hotspot.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.debug.*;
@@ -626,11 +627,11 @@
private void testPredicate(final String snippet, final GraphPredicate expectedBarriers, final int... removedBarrierIndices) {
try (Scope d = Debug.scope("WriteBarrierVerificationTest", new DebugDumpScope(snippet))) {
- final StructuredGraph graph = parseEager(snippet);
- HighTierContext highTierContext = new HighTierContext(getProviders(), new Assumptions(false), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ final StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext highTierContext = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, highTierContext);
- MidTierContext midTierContext = new MidTierContext(getProviders(), new Assumptions(false), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
+ MidTierContext midTierContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
new LoweringPhase(new CanonicalizerPhase(true), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, highTierContext);
new GuardLoweringPhase().apply(graph, midTierContext);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Wed Feb 11 10:13:08 2015 +0100
@@ -213,7 +213,7 @@
Replacements replacements = providers.getReplacements();
graph = replacements.getMethodSubstitution(method);
if (graph == null || entryBCI != INVOCATION_ENTRY_BCI) {
- graph = new StructuredGraph(method, entryBCI);
+ graph = new StructuredGraph(method, entryBCI, OptAssumptions.getValue());
} else {
// Compiling method substitution - must clone the graph
graph = graph.copy();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.hotspot.nfi;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
import java.util.*;
@@ -52,7 +53,7 @@
public static StructuredGraph getGraph(HotSpotProviders providers, RawNativeCallNodeFactory factory, long functionPointer, Class> returnType, Class>... argumentTypes) {
try {
ResolvedJavaMethod method = providers.getMetaAccess().lookupJavaMethod(NativeCallStubGraphBuilder.class.getMethod("libCall", Object.class, Object.class, Object.class));
- StructuredGraph g = new StructuredGraph(method);
+ StructuredGraph g = new StructuredGraph(method, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
ParameterNode arg0 = g.unique(new ParameterNode(0, StampFactory.forKind(Kind.Object)));
ParameterNode arg1 = g.unique(new ParameterNode(1, StampFactory.forKind(Kind.Object)));
ParameterNode arg2 = g.unique(new ParameterNode(2, StampFactory.forKind(Kind.Object)));
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,7 +22,6 @@
*/
package com.oracle.graal.hotspot.replacements;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.graph.spi.*;
@@ -43,10 +42,10 @@
return arguments.get(0);
}
- private ConstantNode getConstantCallTarget(MetaAccessProvider metaAccess, Assumptions assumptions) {
+ private ConstantNode getConstantCallTarget(MetaAccessProvider metaAccess) {
if (getCallSite().isConstant() && !getCallSite().isNullConstant()) {
HotSpotObjectConstant c = (HotSpotObjectConstant) getCallSite().asConstant();
- JavaConstant target = c.getCallSiteTarget(assumptions);
+ JavaConstant target = c.getCallSiteTarget(graph().getAssumptions());
if (target != null) {
return ConstantNode.forConstant(target, metaAccess);
}
@@ -56,7 +55,7 @@
@Override
public Node canonical(CanonicalizerTool tool) {
- ConstantNode target = getConstantCallTarget(tool.getMetaAccess(), tool.assumptions());
+ ConstantNode target = getConstantCallTarget(tool.getMetaAccess());
if (target != null) {
return target;
}
@@ -66,7 +65,7 @@
@Override
public void lower(LoweringTool tool) {
- ConstantNode target = getConstantCallTarget(tool.getMetaAccess(), tool.assumptions());
+ ConstantNode target = getConstantCallTarget(tool.getMetaAccess());
if (target != null) {
graph().replaceFixedWithFloating(this, target);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Wed Feb 11 10:13:08 2015 +0100
@@ -226,7 +226,8 @@
if (replacer.instanceOf instanceof InstanceOfNode) {
InstanceOfNode instanceOf = (InstanceOfNode) replacer.instanceOf;
ValueNode object = instanceOf.getValue();
- TypeCheckHints hintInfo = new TypeCheckHints(instanceOf.type(), instanceOf.profile(), tool.assumptions(), TypeCheckMinProfileHitProbability.getValue(), TypeCheckMaxHints.getValue());
+ Assumptions assumptions = instanceOf.graph().getAssumptions();
+ TypeCheckHints hintInfo = new TypeCheckHints(instanceOf.type(), instanceOf.profile(), assumptions, TypeCheckMinProfileHitProbability.getValue(), TypeCheckMaxHints.getValue());
final HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) instanceOf.type();
ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), type.klass(), providers.getMetaAccess(), instanceOf.graph());
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -26,6 +26,7 @@
import java.lang.reflect.*;
+import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
@@ -68,9 +69,10 @@
}
assert false : "unhandled array type " + type.getComponentType().getKind();
} else {
- type = getConcreteType(getObject().stamp(), tool.assumptions(), tool.getMetaAccess());
+ Assumptions assumptions = graph().getAssumptions();
+ type = getConcreteType(getObject().stamp(), assumptions, tool.getMetaAccess());
if (type != null) {
- StructuredGraph newGraph = new StructuredGraph();
+ StructuredGraph newGraph = new StructuredGraph(assumptions.useOptimisticAssumptions());
ParameterNode param = newGraph.unique(new ParameterNode(0, getObject().stamp()));
NewInstanceNode newInstance = newGraph.add(new NewInstanceNode(type, true));
newGraph.addAfterFixed(newGraph.start(), newInstance);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -73,7 +73,7 @@
}
// the canonicalization before loop unrolling is needed to propagate the length into
// additions, etc.
- PhaseContext context = new PhaseContext(tool.getMetaAccess(), tool.getConstantReflection(), tool.getLowerer(), tool.getReplacements(), tool.assumptions(), tool.getStampProvider());
+ PhaseContext context = new PhaseContext(tool.getMetaAccess(), tool.getConstantReflection(), tool.getLowerer(), tool.getReplacements(), tool.getStampProvider());
new CanonicalizerPhase(true).apply(snippetGraph, context);
new LoopFullUnrollPhase(new CanonicalizerPhase(true)).apply(snippetGraph, context);
new CanonicalizerPhase(true).apply(snippetGraph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.hotspot.stubs;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.code.CallingConvention.Type.*;
import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.*;
@@ -190,7 +191,7 @@
Class>[] args = linkage.getDescriptor().getArgumentTypes();
boolean isObjectResult = linkage.getOutgoingCallingConvention().getReturn().getKind() == Kind.Object;
- StructuredGraph graph = new StructuredGraph(toString(), null);
+ StructuredGraph graph = new StructuredGraph(toString(), null, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
GraphKit kit = new HotSpotGraphKit(graph, providers);
ParameterNode[] params = createParameters(kit, args);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Wed Feb 11 10:13:08 2015 +0100
@@ -23,7 +23,6 @@
package com.oracle.graal.hotspot.stubs;
import static com.oracle.graal.compiler.GraalCompiler.*;
-import static com.oracle.graal.compiler.common.GraalOptions.*;
import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
import java.util.*;
@@ -158,6 +157,7 @@
if (code == null) {
try (Scope d = Debug.sandbox("CompilingStub", DebugScope.getConfig(), providers.getCodeCache(), debugScopeContext())) {
final StructuredGraph graph = getGraph();
+ assert !graph.getAssumptions().useOptimisticAssumptions();
if (!(graph.start() instanceof StubStartNode)) {
StubStartNode newStart = graph.add(new StubStartNode(Stub.this));
newStart.setStateAfter(graph.start().stateAfter());
@@ -171,15 +171,14 @@
compResult = new CompilationResult(toString());
try (Scope s0 = Debug.scope("StubCompilation", graph, providers.getCodeCache())) {
- Assumptions assumptions = new Assumptions(OptAssumptions.getValue());
Suites defaultSuites = providers.getSuites().getDefaultSuites();
Suites suites = new Suites(new PhaseSuite<>(), defaultSuites.getMidTier(), defaultSuites.getLowTier());
- SchedulePhase schedule = emitFrontEnd(providers, target, graph, assumptions, null, providers.getSuites().getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL,
- getProfilingInfo(graph), null, suites);
+ SchedulePhase schedule = emitFrontEnd(providers, target, graph, null, providers.getSuites().getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, getProfilingInfo(graph),
+ null, suites);
LowLevelSuites lowLevelSuites = providers.getSuites().getDefaultLowLevelSuites();
- emitBackEnd(graph, Stub.this, incomingCc, getInstalledCodeOwner(), backend, target, compResult, CompilationResultBuilderFactory.Default, assumptions, schedule,
+ emitBackEnd(graph, Stub.this, incomingCc, getInstalledCodeOwner(), backend, target, compResult, CompilationResultBuilderFactory.Default, schedule,
getRegisterConfig(), lowLevelSuites);
- } catch (Throwable e) {
+ } catch (Throwable e) {
throw Debug.handle(e);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Feb 11 10:13:08 2015 +0100
@@ -78,7 +78,7 @@
@Override
protected void run(StructuredGraph graph, HighTierContext context) {
- new Instance(context.getMetaAccess(), context.getStampProvider(), context.getAssumptions(), null, context.getConstantReflection(), graphBuilderConfig, graphBuilderPlugins,
+ new Instance(context.getMetaAccess(), context.getStampProvider(), null, context.getConstantReflection(), graphBuilderConfig, graphBuilderPlugins,
context.getOptimisticOptimizations()).run(graph);
}
@@ -102,7 +102,6 @@
private final GraphBuilderPlugins graphBuilderPlugins;
private final OptimisticOptimizations optimisticOpts;
private final StampProvider stampProvider;
- private final Assumptions assumptions;
private final ConstantReflectionProvider constantReflection;
private final SnippetReflectionProvider snippetReflectionProvider;
@@ -113,22 +112,21 @@
return currentGraph;
}
- public Instance(MetaAccessProvider metaAccess, StampProvider stampProvider, Assumptions assumptions, SnippetReflectionProvider snippetReflectionProvider,
+ public Instance(MetaAccessProvider metaAccess, StampProvider stampProvider, SnippetReflectionProvider snippetReflectionProvider,
ConstantReflectionProvider constantReflection, GraphBuilderConfiguration graphBuilderConfig, GraphBuilderPlugins graphBuilderPlugins, OptimisticOptimizations optimisticOpts) {
this.graphBuilderConfig = graphBuilderConfig;
this.optimisticOpts = optimisticOpts;
this.metaAccess = metaAccess;
this.stampProvider = stampProvider;
- this.assumptions = assumptions;
this.graphBuilderPlugins = graphBuilderPlugins;
this.constantReflection = constantReflection;
this.snippetReflectionProvider = snippetReflectionProvider;
assert metaAccess != null;
}
- public Instance(MetaAccessProvider metaAccess, StampProvider stampProvider, Assumptions assumptions, ConstantReflectionProvider constantReflection,
+ public Instance(MetaAccessProvider metaAccess, StampProvider stampProvider, ConstantReflectionProvider constantReflection,
GraphBuilderConfiguration graphBuilderConfig, OptimisticOptimizations optimisticOpts) {
- this(metaAccess, stampProvider, assumptions, null, constantReflection, graphBuilderConfig, null, optimisticOpts);
+ this(metaAccess, stampProvider, null, constantReflection, graphBuilderConfig, null, optimisticOpts);
}
@Override
@@ -836,7 +834,7 @@
InvokeKind invokeKind = initialInvokeKind;
if (initialInvokeKind.isIndirect()) {
ResolvedJavaType contextType = this.frameState.method.getDeclaringClass();
- ResolvedJavaMethod specialCallTarget = MethodCallTargetNode.findSpecialCallTarget(initialInvokeKind, args[0], initialTargetMethod, assumptions, contextType);
+ ResolvedJavaMethod specialCallTarget = MethodCallTargetNode.findSpecialCallTarget(initialInvokeKind, args[0], initialTargetMethod, contextType);
if (specialCallTarget != null) {
invokeKind = InvokeKind.Special;
targetMethod = specialCallTarget;
@@ -1691,7 +1689,7 @@
}
public Assumptions getAssumptions() {
- return assumptions;
+ return currentGraph.getAssumptions();
}
public void push(Kind kind, ValueNode value) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/JTTTest.java
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/JTTTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/JTTTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -56,8 +56,8 @@
}
@Override
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
- StructuredGraph graph = super.parseEager(m);
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
+ StructuredGraph graph = super.parseEager(m, allowOptimisticAssumptions);
if (argsToBind != null) {
Object receiver = isStatic(m.getModifiers()) ? null : this;
Object[] args = argsWithReceiver(receiver, argsToBind);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.nodes.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import org.junit.*;
@@ -45,7 +46,7 @@
@Before
public void before() {
- graph = new StructuredGraph();
+ graph = new StructuredGraph(ALLOW_OPTIMISTIC_ASSUMPTIONS);
}
@Test
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/LoopPhiCanonicalizerTest.java
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/LoopPhiCanonicalizerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/LoopPhiCanonicalizerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.nodes.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.compiler.test.*;
@@ -56,10 +58,10 @@
@Test
public void test() {
- StructuredGraph graph = parseEager("loopSnippet");
+ StructuredGraph graph = parseEager("loopSnippet", ALLOW_OPTIMISTIC_ASSUMPTIONS);
NodePredicate loopPhis = node -> node instanceof PhiNode && ((PhiNode) node).merge() instanceof LoopBeginNode;
- PhaseContext context = new PhaseContext(getProviders(), null);
+ PhaseContext context = new PhaseContext(getProviders());
Assert.assertEquals(5, graph.getNodes().filter(loopPhis).count());
new CanonicalizerPhase(false).apply(graph, context);
Assert.assertEquals(2, graph.getNodes().filter(loopPhis).count());
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.nodes.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import org.junit.*;
@@ -39,7 +40,7 @@
@Before
public void before() {
- graph = new StructuredGraph();
+ graph = new StructuredGraph(ALLOW_OPTIMISTIC_ASSUMPTIONS);
}
@Test
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Wed Feb 11 10:13:08 2015 +0100
@@ -25,6 +25,8 @@
import java.util.*;
import java.util.concurrent.atomic.*;
+import com.oracle.graal.api.code.*;
+import com.oracle.graal.api.code.Assumptions.OptimisticAssumption;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.graph.*;
@@ -94,35 +96,55 @@
private boolean hasValueProxies = true;
/**
+ * The assumptions made while constructing and transforming this graph.
+ */
+ private final Assumptions assumptions;
+
+ /**
* Creates a new Graph containing a single {@link AbstractBeginNode} as the {@link #start()
* start} node.
+ *
+ * @param allowOptimisticAssumptions specifies whether {@link OptimisticAssumption}s can be made
+ * while processing the graph
*/
- public StructuredGraph() {
- this(null, null);
+ public StructuredGraph(boolean allowOptimisticAssumptions) {
+ this(null, null, allowOptimisticAssumptions);
}
/**
* Creates a new Graph containing a single {@link AbstractBeginNode} as the {@link #start()
* start} node.
+ *
+ * @param allowOptimisticAssumptions specifies whether {@link OptimisticAssumption}s can be made
+ * while processing the graph
*/
- public StructuredGraph(String name, ResolvedJavaMethod method) {
- this(name, method, uniqueGraphIds.incrementAndGet(), INVOCATION_ENTRY_BCI);
+ public StructuredGraph(String name, ResolvedJavaMethod method, boolean allowOptimisticAssumptions) {
+ this(name, method, uniqueGraphIds.incrementAndGet(), INVOCATION_ENTRY_BCI, null, allowOptimisticAssumptions);
}
- public StructuredGraph(ResolvedJavaMethod method) {
- this(null, method, uniqueGraphIds.incrementAndGet(), INVOCATION_ENTRY_BCI);
+ /**
+ * @param allowOptimisticAssumptions specifies whether {@link OptimisticAssumption}s can be made
+ * while processing the graph
+ */
+ public StructuredGraph(ResolvedJavaMethod method, boolean allowOptimisticAssumptions) {
+ this(null, method, uniqueGraphIds.incrementAndGet(), INVOCATION_ENTRY_BCI, null, allowOptimisticAssumptions);
}
- public StructuredGraph(ResolvedJavaMethod method, int entryBCI) {
- this(null, method, uniqueGraphIds.incrementAndGet(), entryBCI);
+ /**
+ * @param allowOptimisticAssumptions specifies whether {@link OptimisticAssumption}s can be made
+ * while processing the graph
+ */
+ public StructuredGraph(ResolvedJavaMethod method, int entryBCI, boolean allowOptimisticAssumptions) {
+ this(null, method, uniqueGraphIds.incrementAndGet(), entryBCI, null, allowOptimisticAssumptions);
}
- private StructuredGraph(String name, ResolvedJavaMethod method, long graphId, int entryBCI) {
+ private StructuredGraph(String name, ResolvedJavaMethod method, long graphId, int entryBCI, Assumptions assumptions, boolean allowOptimisticAssumptions) {
super(name);
this.setStart(add(new StartNode()));
this.method = method;
this.graphId = graphId;
this.entryBCI = entryBCI;
+ this.assumptions = assumptions == null ? new Assumptions(allowOptimisticAssumptions) : assumptions;
}
public Stamp getReturnStamp() {
@@ -196,7 +218,9 @@
}
public StructuredGraph copy(String newName, ResolvedJavaMethod newMethod) {
- StructuredGraph copy = new StructuredGraph(newName, newMethod, graphId, entryBCI);
+ final boolean ignored = true;
+ StructuredGraph copy = new StructuredGraph(newName, newMethod, graphId, entryBCI, assumptions, ignored);
+ assert copy.assumptions.equals(assumptions);
copy.setGuardsStage(getGuardsStage());
copy.isAfterFloatingReadPhase = isAfterFloatingReadPhase;
copy.hasValueProxies = hasValueProxies;
@@ -467,4 +491,8 @@
assert !state : "cannot 'unapply' value proxy removal on graph";
hasValueProxies = state;
}
+
+ public Assumptions getAssumptions() {
+ return assumptions;
+ }
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -73,10 +73,10 @@
ResolvedJavaType exactType;
if (objectStamp.isExactType()) {
exactType = objectStamp.type();
- } else if (objectStamp.type() != null && tool.assumptions().useOptimisticAssumptions()) {
+ } else if (objectStamp.type() != null && graph().getAssumptions().useOptimisticAssumptions()) {
exactType = objectStamp.type().findUniqueConcreteSubtype();
if (exactType != null) {
- tool.assumptions().recordConcreteSubtype(objectStamp.type(), exactType);
+ graph().getAssumptions().recordConcreteSubtype(objectStamp.type(), exactType);
}
} else {
exactType = null;
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.nodes.extended;
+import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.graph.*;
@@ -68,10 +69,11 @@
if (StampTool.isExactType(object)) {
return resolveExactMethod(tool, type);
}
- if (type != null && tool.assumptions().useOptimisticAssumptions()) {
+ Assumptions assumptions = graph().getAssumptions();
+ if (type != null && assumptions.useOptimisticAssumptions()) {
ResolvedJavaMethod resolvedMethod = type.findUniqueConcreteMethod(method);
if (resolvedMethod != null && !type.isInterface() && method.getDeclaringClass().isAssignableFrom(type)) {
- tool.assumptions().recordConcreteMethod(method, type, resolvedMethod);
+ assumptions.recordConcreteMethod(method, type, resolvedMethod);
return ConstantNode.forConstant(stamp(), resolvedMethod.getEncoding(), tool.getMetaAccess());
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -26,6 +26,7 @@
import static com.oracle.graal.api.meta.DeoptimizationReason.*;
import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*;
+import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.api.meta.ProfilingInfo.TriState;
import com.oracle.graal.compiler.common.type.*;
@@ -157,11 +158,12 @@
return synonym;
}
- if (tool.assumptions() != null && tool.assumptions().useOptimisticAssumptions()) {
+ Assumptions assumptions = graph().getAssumptions();
+ if (assumptions.useOptimisticAssumptions()) {
ResolvedJavaType exactType = type.findUniqueConcreteSubtype();
if (exactType != null && !exactType.equals(type)) {
// Propagate more precise type information to usages of the checkcast.
- tool.assumptions().recordConcreteSubtype(type, exactType);
+ assumptions.recordConcreteSubtype(type, exactType);
return new CheckCastNode(exactType, object, profile, forStoreCheck);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.nodes.java;
+import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.graph.spi.*;
@@ -77,12 +78,13 @@
if (result != null) {
return result;
}
- if (tool.assumptions() != null && tool.assumptions().useOptimisticAssumptions()) {
+ Assumptions assumptions = graph().getAssumptions();
+ if (assumptions.useOptimisticAssumptions()) {
ResolvedJavaType exact = stampType.findUniqueConcreteSubtype();
if (exact != null) {
result = checkInstanceOf(forValue, exact, objectStamp.nonNull(), true);
if (result != null) {
- tool.assumptions().recordConcreteSubtype(stampType, exact);
+ assumptions.recordConcreteSubtype(stampType, exact);
return result;
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -94,7 +94,11 @@
}
}
- public static ResolvedJavaMethod findSpecialCallTarget(InvokeKind invokeKind, ValueNode receiver, ResolvedJavaMethod targetMethod, Assumptions assumptions, ResolvedJavaType contextType) {
+ public static ResolvedJavaMethod findSpecialCallTarget(InvokeKind invokeKind, ValueNode receiver, ResolvedJavaMethod targetMethod, ResolvedJavaType contextType) {
+ if (targetMethod.getName().equals("getProperties") && receiver.graph().method().getDeclaringClass().getName().equals("Ljava/lang/Character;")) {
+ System.console();
+ }
+
if (invokeKind.isDirect()) {
return null;
}
@@ -119,7 +123,8 @@
if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) {
return resolvedMethod;
}
- if (assumptions != null && assumptions.useOptimisticAssumptions()) {
+ Assumptions assumptions = receiver.graph().getAssumptions();
+ if (assumptions.useOptimisticAssumptions()) {
ResolvedJavaType uniqueConcreteType = type.findUniqueConcreteSubtype();
if (uniqueConcreteType != null) {
ResolvedJavaMethod methodFromUniqueType = uniqueConcreteType.resolveConcreteMethod(targetMethod, contextType);
@@ -144,7 +149,7 @@
public void simplify(SimplifierTool tool) {
// attempt to devirtualize the call
ResolvedJavaType contextType = (invoke().stateAfter() == null && invoke().stateDuring() == null) ? null : invoke().getContextType();
- ResolvedJavaMethod specialCallTarget = findSpecialCallTarget(invokeKind, receiver(), targetMethod, tool.assumptions(), contextType);
+ ResolvedJavaMethod specialCallTarget = findSpecialCallTarget(invokeKind, receiver(), targetMethod, contextType);
if (specialCallTarget != null) {
this.setTargetMethod(specialCallTarget);
setInvokeKind(InvokeKind.Special);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -80,7 +80,7 @@
if (!(forValue.stamp() instanceof ObjectStamp)) {
return this;
}
- if (!mayHaveFinalizer(forValue, tool.assumptions())) {
+ if (!mayHaveFinalizer(forValue, graph().getAssumptions())) {
return null;
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,7 +22,6 @@
*/
package com.oracle.graal.nodes.spi;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.nodes.extended.*;
@@ -43,8 +42,6 @@
GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated);
- Assumptions assumptions();
-
/**
* Gets the closest fixed node preceding the node currently being lowered.
*/
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -35,7 +34,7 @@
/**
* This tool can be used to query the current state (normal/virtualized/re-materialized) of values
* and to describe the actions that would be taken for this state.
- *
+ *
* See also {@link Virtualizable}.
*/
public interface VirtualizerTool {
@@ -52,15 +51,9 @@
ConstantReflectionProvider getConstantReflectionProvider();
/**
- * @return the {@link Assumptions} associated with the current compilation, which can be used to
- * make type assumptions during virtualization.
- */
- Assumptions getAssumptions();
-
- /**
* This method should be used to query the maximum size of virtualized objects before attempting
* virtualization.
- *
+ *
* @return the maximum number of entries for virtualized objects.
*/
int getMaximumEntryCount();
@@ -69,7 +62,7 @@
/**
* Introduces a new virtual object to the current state.
- *
+ *
* @param virtualObject the new virtual object.
* @param entryState the initial state of the virtual object's fields.
* @param locks the initial locking depths.
@@ -79,7 +72,7 @@
/**
* Queries the current state of the given value: if it is virtualized (thread-local and the
* compiler knows all entries) or not.
- *
+ *
* @param value the value whose state should be queried.
* @return the {@link State} representing the value if it has been virtualized at some point,
* null otherwise.
@@ -88,7 +81,7 @@
/**
* Sets the entry (field or array element) with the given index in the virtualized object.
- *
+ *
* @param state the state.
* @param index the index to be set.
* @param value the new value for the given index.
@@ -102,7 +95,7 @@
* Replacements via {@link #replaceWithValue(ValueNode)} are not immediately committed. This
* method can be used to determine if a value was replaced by another one (e.g., a load field by
* the loaded value).
- *
+ *
* @param original the original input value.
* @return the replacement value, or the original value if there is no replacement.
*/
@@ -112,14 +105,14 @@
/**
* Deletes the current node and replaces it with the given virtualized object.
- *
+ *
* @param virtual the virtualized object that should replace the current node.
*/
void replaceWithVirtual(VirtualObjectNode virtual);
/**
* Deletes the current node and replaces it with the given value.
- *
+ *
* @param replacement the value that should replace the current node.
*/
void replaceWithValue(ValueNode replacement);
@@ -131,7 +124,7 @@
/**
* Replaces an input of the current node.
- *
+ *
* @param oldInput the old input value.
* @param replacement the new input value.
*/
@@ -140,7 +133,7 @@
/**
* Adds the given node to the graph.This action will only be performed when, and if, the changes
* are committed.
- *
+ *
* @param node the node to add.
*/
void addNode(ValueNode node);
@@ -148,7 +141,7 @@
/**
* This method performs either {@link #replaceWithValue(ValueNode)} or
* {@link #replaceWithVirtual(VirtualObjectNode)}, depending on the given value.
- *
+ *
* @param value the replacement value
*/
void replaceWith(ValueNode value);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.graph.iterators.*;
@@ -473,22 +472,16 @@
}
private static final class DefaultSimplifierTool implements SimplifierTool {
- private final Assumptions assumptions;
private final MetaAccessProvider metaAccess;
private final ConstantReflectionProvider constantReflection;
private final boolean canonicalizeReads;
- public DefaultSimplifierTool(Assumptions assumptions, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, boolean canonicalizeReads) {
- this.assumptions = assumptions;
+ public DefaultSimplifierTool(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, boolean canonicalizeReads) {
this.metaAccess = metaAccess;
this.constantReflection = constantReflection;
this.canonicalizeReads = canonicalizeReads;
}
- public Assumptions assumptions() {
- return assumptions;
- }
-
public MetaAccessProvider getMetaAccess() {
return metaAccess;
}
@@ -517,7 +510,7 @@
}
}
- public static SimplifierTool getDefaultSimplifier(Assumptions assumptions, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, boolean canonicalizeReads) {
- return new DefaultSimplifierTool(assumptions, metaAccess, constantReflection, canonicalizeReads);
+ public static SimplifierTool getDefaultSimplifier(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, boolean canonicalizeReads) {
+ return new DefaultSimplifierTool(metaAccess, constantReflection, canonicalizeReads);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,12 +22,13 @@
*/
package com.oracle.graal.phases.common;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
import com.oracle.graal.graph.*;
-import com.oracle.graal.graph.Graph.*;
+import com.oracle.graal.graph.Graph.Mark;
+import com.oracle.graal.graph.Graph.NodeEventListener;
+import com.oracle.graal.graph.Graph.NodeEventScope;
import com.oracle.graal.graph.spi.*;
import com.oracle.graal.nodeinfo.*;
import com.oracle.graal.nodes.*;
@@ -394,15 +395,6 @@
GraphUtil.killCFG(branch, this);
}
- /**
- * @return an object that can be used for recording assumptions or {@code null} if
- * assumptions are not allowed in the current context.
- */
- @Override
- public Assumptions assumptions() {
- return context.getAssumptions();
- }
-
@Override
public MetaAccessProvider getMetaAccess() {
return context.getMetaAccess();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java Wed Feb 11 10:13:08 2015 +0100
@@ -49,7 +49,7 @@
*
*/
public class ConvertDeoptimizeToGuardPhase extends Phase {
- private SimplifierTool simplifierTool = GraphUtil.getDefaultSimplifier(null, null, null, false);
+ private SimplifierTool simplifierTool = GraphUtil.getDefaultSimplifier(null, null, false);
private static AbstractBeginNode findBeginNode(FixedNode startNode) {
return GraphUtil.predecessorIterable(startNode).filter(AbstractBeginNode.class).first();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Wed Feb 11 10:13:08 2015 +0100
@@ -26,7 +26,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.graph.Graph.Mark;
@@ -120,11 +119,6 @@
return createGuard(before, condition, deoptReason, action, false);
}
- @Override
- public Assumptions assumptions() {
- return context.getAssumptions();
- }
-
public StampProvider getStampProvider() {
return context.getStampProvider();
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java Wed Feb 11 10:13:08 2015 +0100
@@ -27,9 +27,8 @@
import com.oracle.graal.nodes.*;
import com.oracle.graal.options.*;
import com.oracle.graal.phases.common.*;
-import com.oracle.graal.phases.common.inlining.policy.GreedyInliningPolicy;
-import com.oracle.graal.phases.common.inlining.policy.InliningPolicy;
-import com.oracle.graal.phases.common.inlining.walker.InliningData;
+import com.oracle.graal.phases.common.inlining.policy.*;
+import com.oracle.graal.phases.common.inlining.walker.*;
import com.oracle.graal.phases.tiers.*;
public class InliningPhase extends AbstractInliningPhase {
@@ -93,5 +92,4 @@
assert data.inliningDepth() == 0;
assert data.graphCount() == 0;
}
-
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Wed Feb 11 10:13:08 2015 +0100
@@ -114,7 +114,15 @@
public static void logNotInlinedMethod(Invoke invoke, String msg) {
if (shouldLogInliningDecision()) {
- String methodString = invoke.toString() + (invoke.callTarget() == null ? " callTarget=null" : invoke.callTarget().targetName());
+ String methodString = invoke.toString();
+ if (invoke.callTarget() == null) {
+ methodString += " callTarget=null";
+ } else {
+ String targetName = invoke.callTarget().targetName();
+ if (!methodString.endsWith(targetName)) {
+ methodString += " " + targetName;
+ }
+ }
logInliningDecision(methodString, false, msg, new Object[0]);
}
}
@@ -355,6 +363,9 @@
invokeNode.replaceAtUsages(null);
GraphUtil.killCFG(invokeNode);
+ // Copy assumptions from inlinee to caller
+ graph.getAssumptions().record(inlineGraph.getAssumptions());
+
return duplicates;
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.Assumptions;
import com.oracle.graal.api.meta.ResolvedJavaMethod;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -53,7 +52,7 @@
return invoke;
}
- protected static Collection inline(Invoke invoke, ResolvedJavaMethod concrete, Inlineable inlineable, Assumptions assumptions, boolean receiverNullCheck) {
+ protected static Collection inline(Invoke invoke, ResolvedJavaMethod concrete, Inlineable inlineable, boolean receiverNullCheck) {
List canonicalizeNodes = new ArrayList<>();
if (inlineable instanceof InlineableGraph) {
StructuredGraph calleeGraph = ((InlineableGraph) inlineable).getGraph();
@@ -68,7 +67,7 @@
}
InliningUtil.InlinedBytecodes.add(concrete.getCodeSize());
- assumptions.recordMethodContents(concrete);
+ invoke.asNode().graph().getAssumptions().recordMethodContents(concrete);
return canonicalizeNodes;
}
@@ -83,9 +82,9 @@
}
}
- public final void populateInlinableElements(HighTierContext context, Assumptions calleeAssumptions, CanonicalizerPhase canonicalizer) {
+ public final void populateInlinableElements(HighTierContext context, StructuredGraph caller, CanonicalizerPhase canonicalizer) {
for (int i = 0; i < numberOfMethods(); i++) {
- Inlineable elem = Inlineable.getInlineableElement(methodAt(i), invoke, context.replaceAssumptions(calleeAssumptions), canonicalizer);
+ Inlineable elem = Inlineable.getInlineableElement(methodAt(i), invoke, context, canonicalizer);
setInlinableElement(i, elem);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.code.Assumptions.Assumption;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
@@ -47,14 +46,14 @@
}
@Override
- public Collection inline(Providers providers, Assumptions assumptions) {
- assumptions.record(takenAssumption);
- return super.inline(providers, assumptions);
+ public Collection inline(Providers providers) {
+ invoke.asNode().graph().getAssumptions().record(takenAssumption);
+ return super.inline(providers);
}
@Override
- public void tryToDevirtualizeInvoke(Providers providers, Assumptions assumptions) {
- assumptions.record(takenAssumption);
+ public void tryToDevirtualizeInvoke(Providers providers) {
+ invoke.asNode().graph().getAssumptions().record(takenAssumption);
InliningUtil.replaceInvokeCallTarget(invoke, graph(), InvokeKind.Special, concrete);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/ExactInlineInfo.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/ExactInlineInfo.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/ExactInlineInfo.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -52,12 +51,12 @@
}
@Override
- public Collection inline(Providers providers, Assumptions assumptions) {
- return inline(invoke, concrete, inlineableElement, assumptions, !suppressNullCheck);
+ public Collection inline(Providers providers) {
+ return inline(invoke, concrete, inlineableElement, !suppressNullCheck);
}
@Override
- public void tryToDevirtualizeInvoke(Providers providers, Assumptions assumptions) {
+ public void tryToDevirtualizeInvoke(Providers providers) {
// nothing todo, can already be bound statically
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -74,16 +73,16 @@
*
* @return a collection of nodes that need to be canonicalized after the inlining
*/
- Collection inline(Providers providers, Assumptions assumptions);
+ Collection inline(Providers providers);
/**
* Try to make the call static bindable to avoid interface and virtual method calls.
*/
- void tryToDevirtualizeInvoke(Providers providers, Assumptions assumptions);
+ void tryToDevirtualizeInvoke(Providers providers);
boolean shouldInline();
- void populateInlinableElements(HighTierContext context, Assumptions calleeAssumptions, CanonicalizerPhase canonicalizer);
+ void populateInlinableElements(HighTierContext context, StructuredGraph caller, CanonicalizerPhase canonicalizer);
int determineNodeCount();
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Wed Feb 11 10:13:08 2015 +0100
@@ -26,7 +26,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.api.meta.JavaTypeProfile.ProfiledType;
import com.oracle.graal.compiler.common.calc.*;
@@ -142,11 +141,11 @@
}
@Override
- public Collection inline(Providers providers, Assumptions assumptions) {
+ public Collection inline(Providers providers) {
if (hasSingleMethod()) {
- return inlineSingleMethod(graph(), providers.getMetaAccess(), assumptions, providers.getStampProvider());
+ return inlineSingleMethod(graph(), providers.getMetaAccess(), providers.getStampProvider());
} else {
- return inlineMultipleMethods(graph(), providers, assumptions);
+ return inlineMultipleMethods(graph(), providers);
}
}
@@ -167,7 +166,7 @@
return notRecordedTypeProbability > 0;
}
- private Collection inlineMultipleMethods(StructuredGraph graph, Providers providers, Assumptions assumptions) {
+ private Collection inlineMultipleMethods(StructuredGraph graph, Providers providers) {
int numberOfMethods = concretes.size();
FixedNode continuation = invoke.next();
@@ -276,7 +275,7 @@
if (opportunities > 0) {
metricInliningTailDuplication.increment();
Debug.log("MultiTypeGuardInlineInfo starting tail duplication (%d opportunities)", opportunities);
- PhaseContext phaseContext = new PhaseContext(providers, assumptions);
+ PhaseContext phaseContext = new PhaseContext(providers);
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(!ImmutableCode.getValue());
TailDuplicationPhase.tailDuplicate(returnMerge, TailDuplicationPhase.TRUE_DECISION, replacementNodes, phaseContext, canonicalizer);
}
@@ -286,7 +285,7 @@
// do the actual inlining for every invoke
for (int i = 0; i < numberOfMethods; i++) {
Invoke invokeForInlining = (Invoke) successors[i].next();
- canonicalizeNodes.addAll(inline(invokeForInlining, methodAt(i), inlineableElementAt(i), assumptions, false));
+ canonicalizeNodes.addAll(inline(invokeForInlining, methodAt(i), inlineableElementAt(i), false));
}
if (returnValuePhi != null) {
canonicalizeNodes.add(returnValuePhi);
@@ -327,7 +326,7 @@
return result;
}
- private Collection inlineSingleMethod(StructuredGraph graph, MetaAccessProvider metaAccess, Assumptions assumptions, StampProvider stampProvider) {
+ private Collection inlineSingleMethod(StructuredGraph graph, MetaAccessProvider metaAccess, StampProvider stampProvider) {
assert concretes.size() == 1 && inlineableElements.length == 1 && ptypes.size() > 1 && !shouldFallbackToInvoke() && notRecordedTypeProbability == 0;
AbstractBeginNode calleeEntryNode = graph.add(new BeginNode());
@@ -338,7 +337,7 @@
calleeEntryNode.setNext(invoke.asNode());
- return inline(invoke, methodAt(0), inlineableElementAt(0), assumptions, false);
+ return inline(invoke, methodAt(0), inlineableElementAt(0), false);
}
private boolean createDispatchOnTypeBeforeInvoke(StructuredGraph graph, AbstractBeginNode[] successors, boolean invokeIsOnlySuccessor, MetaAccessProvider metaAccess, StampProvider stampProvider) {
@@ -511,7 +510,7 @@
}
@Override
- public void tryToDevirtualizeInvoke(Providers providers, Assumptions assumptions) {
+ public void tryToDevirtualizeInvoke(Providers providers) {
if (hasSingleMethod()) {
devirtualizeWithTypeSwitch(graph(), InvokeKind.Special, concretes.get(0), providers.getMetaAccess(), providers.getStampProvider());
} else {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.calc.*;
import com.oracle.graal.graph.*;
@@ -90,13 +89,13 @@
}
@Override
- public Collection inline(Providers providers, Assumptions assumptions) {
+ public Collection inline(Providers providers) {
createGuard(graph(), providers);
- return inline(invoke, concrete, inlineableElement, assumptions, false);
+ return inline(invoke, concrete, inlineableElement, false);
}
@Override
- public void tryToDevirtualizeInvoke(Providers providers, Assumptions assumptions) {
+ public void tryToDevirtualizeInvoke(Providers providers) {
createGuard(graph(), providers);
InliningUtil.replaceInvokeCallTarget(invoke, graph(), InvokeKind.Special, concrete);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java Wed Feb 11 10:13:08 2015 +0100
@@ -58,7 +58,7 @@
private FixedNodeProbabilityCache probabilites = new FixedNodeProbabilityCache();
public InlineableGraph(final ResolvedJavaMethod method, final Invoke invoke, final HighTierContext context, CanonicalizerPhase canonicalizer) {
- StructuredGraph original = getOriginalGraph(method, context, canonicalizer);
+ StructuredGraph original = getOriginalGraph(method, context, canonicalizer, invoke.asNode().graph());
// TODO copying the graph is only necessary if it is modified or if it contains any invokes
this.graph = original.copy();
specializeGraphToArguments(invoke, context, canonicalizer);
@@ -69,7 +69,7 @@
* The graph thus obtained is returned, ie the caller is responsible for cloning before
* modification.
*/
- private static StructuredGraph getOriginalGraph(final ResolvedJavaMethod method, final HighTierContext context, CanonicalizerPhase canonicalizer) {
+ private static StructuredGraph getOriginalGraph(final ResolvedJavaMethod method, final HighTierContext context, CanonicalizerPhase canonicalizer, StructuredGraph caller) {
StructuredGraph result = InliningUtil.getIntrinsicGraph(context.getReplacements(), method);
if (result != null) {
return result;
@@ -78,7 +78,7 @@
if (result != null) {
return result;
}
- return parseBytecodes(method, context, canonicalizer);
+ return parseBytecodes(method, context, canonicalizer, caller);
}
/**
@@ -184,6 +184,7 @@
if (context.getGraphCache() != null) {
StructuredGraph cachedGraph = context.getGraphCache().get(method);
if (cachedGraph != null) {
+ assert false;
return cachedGraph;
}
}
@@ -195,8 +196,8 @@
* Provided profiling info is mature, the resulting graph is cached. The caller is responsible
* for cloning before modification.
*/
- private static StructuredGraph parseBytecodes(ResolvedJavaMethod method, HighTierContext context, CanonicalizerPhase canonicalizer) {
- StructuredGraph newGraph = new StructuredGraph(method);
+ private static StructuredGraph parseBytecodes(ResolvedJavaMethod method, HighTierContext context, CanonicalizerPhase canonicalizer, StructuredGraph caller) {
+ StructuredGraph newGraph = new StructuredGraph(method, caller.getAssumptions().useOptimisticAssumptions());
try (Debug.Scope s = Debug.scope("InlineGraph", newGraph)) {
if (context.getGraphBuilderSuite() != null) {
context.getGraphBuilderSuite().apply(newGraph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java Wed Feb 11 10:13:08 2015 +0100
@@ -100,8 +100,7 @@
this.inliningPolicy = inliningPolicy;
this.maxGraphs = 1;
- Assumptions rootAssumptions = context.getAssumptions();
- invocationQueue.push(new MethodInvocation(null, rootAssumptions, 1.0, 1.0, null));
+ invocationQueue.push(new MethodInvocation(null, 1.0, 1.0, null));
graphQueue.push(new CallsiteHolderExplorable(rootGraph, 1.0, 1.0, null));
}
@@ -145,7 +144,7 @@
* @param invoke the invoke that should be inlined
* @return an instance of InlineInfo, or null if no inlining is possible at the given invoke
*/
- private InlineInfo getInlineInfo(Invoke invoke, Assumptions assumptions) {
+ private InlineInfo getInlineInfo(Invoke invoke) {
final String failureMessage = InliningUtil.checkInvokeConditions(invoke);
if (failureMessage != null) {
InliningUtil.logNotInlinedMethod(invoke, failureMessage);
@@ -194,7 +193,7 @@
}
}
- if (assumptions.useOptimisticAssumptions()) {
+ if (callTarget.graph().getAssumptions().useOptimisticAssumptions()) {
ResolvedJavaType uniqueSubtype = holder.findUniqueConcreteSubtype();
if (uniqueSubtype != null) {
ResolvedJavaMethod resolvedMethod = uniqueSubtype.resolveConcreteMethod(targetMethod, contextType);
@@ -354,16 +353,15 @@
return null;
}
- private void doInline(CallsiteHolderExplorable callerCallsiteHolder, MethodInvocation calleeInvocation, Assumptions callerAssumptions) {
+ private void doInline(CallsiteHolderExplorable callerCallsiteHolder, MethodInvocation calleeInvocation) {
StructuredGraph callerGraph = callerCallsiteHolder.graph();
InlineInfo calleeInfo = calleeInvocation.callee();
try {
try (Debug.Scope scope = Debug.scope("doInline", callerGraph)) {
Set canonicalizedNodes = Node.newSet();
calleeInfo.invoke().asNode().usages().snapshotTo(canonicalizedNodes);
- Collection parameterUsages = calleeInfo.inline(new Providers(context), callerAssumptions);
+ Collection parameterUsages = calleeInfo.inline(new Providers(context));
canonicalizedNodes.addAll(parameterUsages);
- callerAssumptions.record(calleeInvocation.assumptions());
metricInliningRuns.increment();
Debug.dump(callerGraph, "after %s", calleeInfo);
@@ -409,20 +407,19 @@
*
* @return true iff inlining was actually performed
*/
- private boolean tryToInline(MethodInvocation calleeInvocation, MethodInvocation parentInvocation, int inliningDepth) {
+ private boolean tryToInline(MethodInvocation calleeInvocation, int inliningDepth) {
CallsiteHolderExplorable callerCallsiteHolder = (CallsiteHolderExplorable) currentGraph();
InlineInfo calleeInfo = calleeInvocation.callee();
assert callerCallsiteHolder.containsInvoke(calleeInfo.invoke());
- Assumptions callerAssumptions = parentInvocation.assumptions();
metricInliningConsidered.increment();
if (inliningPolicy.isWorthInlining(context.getReplacements(), calleeInvocation, inliningDepth, true)) {
- doInline(callerCallsiteHolder, calleeInvocation, callerAssumptions);
+ doInline(callerCallsiteHolder, calleeInvocation);
return true;
}
if (context.getOptimisticOptimizations().devirtualizeInvokes()) {
- calleeInfo.tryToDevirtualizeInvoke(new Providers(context), callerAssumptions);
+ calleeInfo.tryToDevirtualizeInvoke(new Providers(context));
}
return false;
@@ -450,22 +447,19 @@
*
* The {@link InlineInfo} used to get things rolling is kept around in the
* {@link MethodInvocation}, it will be needed in case of inlining, see
- * {@link InlineInfo#inline(Providers, Assumptions)}
+ * {@link InlineInfo#inline(Providers)}
*
*/
private void processNextInvoke() {
CallsiteHolderExplorable callsiteHolder = (CallsiteHolderExplorable) currentGraph();
Invoke invoke = callsiteHolder.popInvoke();
- MethodInvocation callerInvocation = currentInvocation();
- Assumptions parentAssumptions = callerInvocation.assumptions();
- InlineInfo info = getInlineInfo(invoke, parentAssumptions);
+ InlineInfo info = getInlineInfo(invoke);
if (info != null) {
- Assumptions calleeAssumptions = new Assumptions(parentAssumptions.useOptimisticAssumptions());
- info.populateInlinableElements(context, calleeAssumptions, canonicalizer);
+ info.populateInlinableElements(context, currentGraph().graph(), canonicalizer);
double invokeProbability = callsiteHolder.invokeProbability(invoke);
double invokeRelevance = callsiteHolder.invokeRelevance(invoke);
- MethodInvocation methodInvocation = new MethodInvocation(info, calleeAssumptions, invokeProbability, invokeRelevance, freshlyInstantiatedArguments(invoke, callsiteHolder.getFixedParams()));
+ MethodInvocation methodInvocation = new MethodInvocation(info, invokeProbability, invokeRelevance, freshlyInstantiatedArguments(invoke, callsiteHolder.getFixedParams()));
pushInvocationAndGraphs(methodInvocation);
}
}
@@ -640,12 +634,12 @@
* {@link #processNextInvoke() delve} into one of the callsites hosted in the current graph,
* such callsite is explored next by {@link #moveForward()}
*
- * {@link #tryToInline(MethodInvocation, MethodInvocation, int) try to inline}: move past the
- * current graph (remove it from the topmost element).
+ * {@link #tryToInline(MethodInvocation, int) try to inline}: move past the current graph
+ * (remove it from the topmost element).
*
* -
- * If that was the last one then {@link #tryToInline(MethodInvocation, MethodInvocation, int)
- * try to inline} the callsite under consideration (ie, the "current invocation").
+ * If that was the last one then {@link #tryToInline(MethodInvocation, int) try to inline} the
+ * callsite under consideration (ie, the "current invocation").
*
* Whether inlining occurs or not, that callsite is removed from the top of {@link InliningData}
* .
@@ -703,9 +697,8 @@
* "all concrete methods that come into question already had the callees they contain analyzed for inlining"
*/
popInvocation();
- final MethodInvocation parentInvoke = currentInvocation();
try (Debug.Scope s = Debug.scope("Inlining", inliningContext())) {
- return tryToInline(currentInvocation, parentInvoke, inliningDepth() + 1);
+ return tryToInline(currentInvocation, inliningDepth() + 1);
} catch (Throwable e) {
throw Debug.handle(e);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/MethodInvocation.java
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/MethodInvocation.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/MethodInvocation.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,16 +22,13 @@
*/
package com.oracle.graal.phases.common.inlining.walker;
-import com.oracle.graal.api.code.Assumptions;
-import com.oracle.graal.api.meta.ResolvedJavaMethod;
-import com.oracle.graal.nodes.CallTargetNode;
-import com.oracle.graal.nodes.java.MethodCallTargetNode;
-import com.oracle.graal.phases.common.inlining.info.InlineInfo;
-import com.oracle.graal.phases.common.inlining.info.elem.Inlineable;
-import com.oracle.graal.phases.common.inlining.info.elem.InlineableGraph;
-import com.oracle.graal.phases.common.inlining.info.elem.InlineableMacroNode;
+import java.util.*;
-import java.util.BitSet;
+import com.oracle.graal.api.meta.*;
+import com.oracle.graal.nodes.*;
+import com.oracle.graal.nodes.java.*;
+import com.oracle.graal.phases.common.inlining.info.*;
+import com.oracle.graal.phases.common.inlining.info.elem.*;
/**
*
@@ -47,7 +44,6 @@
public class MethodInvocation {
private final InlineInfo callee;
- private final Assumptions assumptions;
private final double probability;
private final double relevance;
@@ -79,9 +75,8 @@
private final int sizeFreshArgs;
- public MethodInvocation(InlineInfo info, Assumptions assumptions, double probability, double relevance, BitSet freshlyInstantiatedArguments) {
+ public MethodInvocation(InlineInfo info, double probability, double relevance, BitSet freshlyInstantiatedArguments) {
this.callee = info;
- this.assumptions = assumptions;
this.probability = probability;
this.relevance = relevance;
this.freshlyInstantiatedArguments = freshlyInstantiatedArguments;
@@ -106,10 +101,6 @@
return callee;
}
- public Assumptions assumptions() {
- return assumptions;
- }
-
public double probability() {
return probability;
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/HighTierContext.java
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/HighTierContext.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/HighTierContext.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.*;
@@ -37,9 +36,8 @@
private final Map cache;
private final OptimisticOptimizations optimisticOpts;
- public HighTierContext(Providers providers, Assumptions assumptions, Map cache, PhaseSuite graphBuilderSuite,
- OptimisticOptimizations optimisticOpts) {
- super(providers, assumptions);
+ public HighTierContext(Providers providers, Map cache, PhaseSuite graphBuilderSuite, OptimisticOptimizations optimisticOpts) {
+ super(providers);
this.cache = cache;
this.graphBuilderSuite = graphBuilderSuite;
this.optimisticOpts = optimisticOpts;
@@ -56,8 +54,4 @@
public OptimisticOptimizations getOptimisticOptimizations() {
return optimisticOpts;
}
-
- public HighTierContext replaceAssumptions(Assumptions newAssumptions) {
- return new HighTierContext(new Providers(this), newAssumptions, cache, graphBuilderSuite, optimisticOpts);
- }
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/LowTierContext.java
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/LowTierContext.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/LowTierContext.java Wed Feb 11 10:13:08 2015 +0100
@@ -29,8 +29,8 @@
private final TargetDescription target;
- public LowTierContext(Providers copyFrom, Assumptions assumptions, TargetDescription target) {
- super(copyFrom, assumptions);
+ public LowTierContext(Providers copyFrom, TargetDescription target) {
+ super(copyFrom);
this.target = target;
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/MidTierContext.java
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/MidTierContext.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/MidTierContext.java Wed Feb 11 10:13:08 2015 +0100
@@ -34,8 +34,8 @@
private final ProfilingInfo profilingInfo;
private final SpeculationLog log;
- public MidTierContext(Providers copyFrom, Assumptions assumptions, TargetDescription target, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, SpeculationLog log) {
- super(copyFrom, assumptions);
+ public MidTierContext(Providers copyFrom, TargetDescription target, OptimisticOptimizations optimisticOpts, ProfilingInfo profilingInfo, SpeculationLog log) {
+ super(copyFrom);
this.target = target;
this.optimisticOpts = optimisticOpts;
this.profilingInfo = profilingInfo;
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/PhaseContext.java
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/PhaseContext.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/PhaseContext.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,7 +22,6 @@
*/
package com.oracle.graal.phases.tiers;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.nodes.spi.*;
import com.oracle.graal.phases.util.*;
@@ -33,21 +32,18 @@
private final ConstantReflectionProvider constantReflection;
private final LoweringProvider lowerer;
private final Replacements replacements;
- private final Assumptions assumptions;
private final StampProvider stampProvider;
- public PhaseContext(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, LoweringProvider lowerer, Replacements replacements, Assumptions assumptions,
- StampProvider stampProvider) {
+ public PhaseContext(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, LoweringProvider lowerer, Replacements replacements, StampProvider stampProvider) {
this.metaAccess = metaAccess;
this.constantReflection = constantReflection;
this.lowerer = lowerer;
this.replacements = replacements;
- this.assumptions = assumptions;
this.stampProvider = stampProvider;
}
- public PhaseContext(Providers providers, Assumptions assumptions) {
- this(providers.getMetaAccess(), providers.getConstantReflection(), providers.getLowerer(), providers.getReplacements(), assumptions, providers.getStampProvider());
+ public PhaseContext(Providers providers) {
+ this(providers.getMetaAccess(), providers.getConstantReflection(), providers.getLowerer(), providers.getReplacements(), providers.getStampProvider());
}
public MetaAccessProvider getMetaAccess() {
@@ -66,10 +62,6 @@
return replacements;
}
- public Assumptions getAssumptions() {
- return assumptions;
- }
-
public StampProvider getStampProvider() {
return stampProvider;
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ArraysSubstitutionsTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ArraysSubstitutionsTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ArraysSubstitutionsTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.replacements.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.nodes.*;
import com.oracle.graal.phases.*;
import com.oracle.graal.phases.common.*;
@@ -330,11 +331,10 @@
@Test
public void testCanonicalLength() {
- StructuredGraph graph = parseEager("testCanonicalLengthSnippet");
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager("testCanonicalLengthSnippet", DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Assert.assertTrue(graph.getNodes(ReturnNode.class).first().result().asJavaConstant().asLong() == 0);
}
@@ -347,11 +347,10 @@
@Test
public void testCanonicalEqual() {
- StructuredGraph graph = parseEager("testCanonicalEqualSnippet");
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager("testCanonicalEqualSnippet", DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Assert.assertTrue(graph.getNodes(ReturnNode.class).first().result().asJavaConstant().asLong() == 1);
}
@@ -362,13 +361,12 @@
@Test
public void testVirtualEqual() {
- StructuredGraph graph = parseEager("testVirtualEqualSnippet");
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager("testVirtualEqualSnippet", DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new PartialEscapePhase(false, new CanonicalizerPhase(false)).apply(graph, context);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Assert.assertTrue(graph.getNodes(ReturnNode.class).first().result().asJavaConstant().asLong() == 1);
}
@@ -381,13 +379,12 @@
@Test
public void testVirtualNotEqual() {
- StructuredGraph graph = parseEager("testVirtualNotEqualSnippet");
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager("testVirtualNotEqualSnippet", DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new PartialEscapePhase(false, new CanonicalizerPhase(false)).apply(graph, context);
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
Assert.assertTrue(graph.getNodes(ReturnNode.class).first().result().asJavaConstant().asLong() == 0);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/BitOpNodesTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/BitOpNodesTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/BitOpNodesTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.replacements.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.type.*;
import com.oracle.graal.compiler.test.*;
@@ -247,8 +248,8 @@
* @return the returned value or null if {@code expectedClass} is not found in the graph.
*/
private ValueNode parseAndInline(String name, Class extends ValueNode> expectedClass) {
- StructuredGraph graph = parseEager(name);
- HighTierContext context = new HighTierContext(getProviders(), new Assumptions(false), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE);
+ StructuredGraph graph = parseEager(name, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE);
CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
canonicalizer.apply(graph, context);
new InliningPhase(canonicalizer).apply(graph, context);
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CompiledExceptionHandlerTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CompiledExceptionHandlerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CompiledExceptionHandlerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -40,8 +40,8 @@
}
@Override
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
- StructuredGraph graph = super.parseEager(m);
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
+ StructuredGraph graph = super.parseEager(m, allowOptimisticAssumptions);
int handlers = graph.getNodes().filter(ExceptionObjectNode.class).count();
Assert.assertEquals(1, handlers);
return graph;
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,11 +22,12 @@
*/
package com.oracle.graal.replacements.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.lang.reflect.*;
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.graph.*;
@@ -54,7 +55,7 @@
}
- StructuredGraph graph = new StructuredGraph();
+ StructuredGraph graph = new StructuredGraph(DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
TestNode node;
ConstantNode i1;
ConstantNode i2;
@@ -113,9 +114,8 @@
}
ResolvedJavaMethod javaMethod = getMetaAccess().lookupJavaMethod(method);
- StructuredGraph g = parseProfiled(javaMethod);
- Assumptions assumptions = new Assumptions(false);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph g = parseProfiled(javaMethod, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
new InliningPhase(new InlineMethodSubstitutionsPolicy(), new CanonicalizerPhase(true)).apply(g, context);
new CanonicalizerPhase(false).apply(g, context);
Assert.assertTrue(g.getNodes().filter(CheckCastNode.class).isEmpty());
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/MethodSubstitutionTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/MethodSubstitutionTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/MethodSubstitutionTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.replacements.test;
+import static com.oracle.graal.api.code.Assumptions.*;
import static org.junit.Assert.*;
import java.lang.reflect.*;
@@ -48,9 +49,8 @@
protected StructuredGraph test(final String snippet) {
try (Scope s = Debug.scope("MethodSubstitutionTest", getResolvedJavaMethod(snippet))) {
- StructuredGraph graph = parseEager(snippet);
- Assumptions assumptions = new Assumptions(true);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
+ StructuredGraph graph = parseEager(snippet, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
Debug.dump(graph, "Graph");
new InliningPhase(new CanonicalizerPhase(true)).apply(graph, context);
Debug.dump(graph, "Graph");
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.replacements.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.api.code.*;
@@ -51,49 +53,49 @@
private static final ThreadLocal inliningPolicy = new ThreadLocal<>();
@Override
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
return installer.makeGraph(m, null, inliningPolicy.get(), FrameStateProcessing.CollapseFrameForSingleSideEffect);
}
@Test
public void testRead1() {
for (Kind kind : KINDS) {
- assertRead(parseEager("read" + kind.name() + "1"), kind, true, ID);
+ assertRead(parseEager("read" + kind.name() + "1", ALLOW_OPTIMISTIC_ASSUMPTIONS), kind, true, ID);
}
}
@Test
public void testRead2() {
for (Kind kind : KINDS) {
- assertRead(parseEager("read" + kind.name() + "2"), kind, true, ID);
+ assertRead(parseEager("read" + kind.name() + "2", ALLOW_OPTIMISTIC_ASSUMPTIONS), kind, true, ID);
}
}
@Test
public void testRead3() {
for (Kind kind : KINDS) {
- assertRead(parseEager("read" + kind.name() + "3"), kind, true, LocationIdentity.ANY_LOCATION);
+ assertRead(parseEager("read" + kind.name() + "3", ALLOW_OPTIMISTIC_ASSUMPTIONS), kind, true, LocationIdentity.ANY_LOCATION);
}
}
@Test
public void testWrite1() {
for (Kind kind : KINDS) {
- assertWrite(parseEager("write" + kind.name() + "1"), true, ID);
+ assertWrite(parseEager("write" + kind.name() + "1", ALLOW_OPTIMISTIC_ASSUMPTIONS), true, ID);
}
}
@Test
public void testWrite2() {
for (Kind kind : KINDS) {
- assertWrite(parseEager("write" + kind.name() + "2"), true, ID);
+ assertWrite(parseEager("write" + kind.name() + "2", ALLOW_OPTIMISTIC_ASSUMPTIONS), true, ID);
}
}
@Test
public void testWrite3() {
for (Kind kind : KINDS) {
- assertWrite(parseEager("write" + kind.name() + "3"), true, LocationIdentity.ANY_LOCATION);
+ assertWrite(parseEager("write" + kind.name() + "3", ALLOW_OPTIMISTIC_ASSUMPTIONS), true, LocationIdentity.ANY_LOCATION);
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,8 @@
*/
package com.oracle.graal.replacements.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
import com.oracle.graal.api.code.*;
@@ -57,49 +59,49 @@
private static final ThreadLocal inliningPolicy = new ThreadLocal<>();
@Override
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
return installer.makeGraph(m, null, inliningPolicy.get(), FrameStateProcessing.CollapseFrameForSingleSideEffect);
}
@Test
public void testRead1() {
for (Kind kind : KINDS) {
- assertRead(parseEager("read" + kind.name() + "1"), kind, true, ID);
+ assertRead(parseEager("read" + kind.name() + "1", ALLOW_OPTIMISTIC_ASSUMPTIONS), kind, true, ID);
}
}
@Test
public void testRead2() {
for (Kind kind : KINDS) {
- assertRead(parseEager("read" + kind.name() + "2"), kind, true, ID);
+ assertRead(parseEager("read" + kind.name() + "2", ALLOW_OPTIMISTIC_ASSUMPTIONS), kind, true, ID);
}
}
@Test
public void testRead3() {
for (Kind kind : KINDS) {
- assertRead(parseEager("read" + kind.name() + "3"), kind, true, LocationIdentity.ANY_LOCATION);
+ assertRead(parseEager("read" + kind.name() + "3", ALLOW_OPTIMISTIC_ASSUMPTIONS), kind, true, LocationIdentity.ANY_LOCATION);
}
}
@Test
public void testWrite1() {
for (Kind kind : KINDS) {
- assertWrite(parseEager("write" + kind.name() + "1"), true, ID);
+ assertWrite(parseEager("write" + kind.name() + "1", ALLOW_OPTIMISTIC_ASSUMPTIONS), true, ID);
}
}
@Test
public void testWrite2() {
for (Kind kind : KINDS) {
- assertWrite(parseEager("write" + kind.name() + "2"), true, ID);
+ assertWrite(parseEager("write" + kind.name() + "2", ALLOW_OPTIMISTIC_ASSUMPTIONS), true, ID);
}
}
@Test
public void testWrite3() {
for (Kind kind : KINDS) {
- assertWrite(parseEager("write" + kind.name() + "3"), true, LocationIdentity.ANY_LOCATION);
+ assertWrite(parseEager("write" + kind.name() + "3", ALLOW_OPTIMISTIC_ASSUMPTIONS), true, LocationIdentity.ANY_LOCATION);
}
}
@@ -399,10 +401,9 @@
}
private void assertNumWordCasts(String snippetName, int expectedWordCasts) {
- Assumptions assumptions = new Assumptions(true);
- HighTierContext context = new HighTierContext(getProviders(), assumptions, null, null, OptimisticOptimizations.ALL);
+ HighTierContext context = new HighTierContext(getProviders(), null, null, OptimisticOptimizations.ALL);
- StructuredGraph graph = parseEager(snippetName);
+ StructuredGraph graph = parseEager(snippetName, ALLOW_OPTIMISTIC_ASSUMPTIONS);
new CanonicalizerPhase(false).apply(graph, context);
Assert.assertEquals(expectedWordCasts, graph.getNodes().filter(WordCastNode.class).count());
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -47,7 +47,7 @@
private static final ThreadLocal inliningPolicy = new ThreadLocal<>();
@Override
- protected StructuredGraph parseEager(ResolvedJavaMethod m) {
+ protected StructuredGraph parseEager(ResolvedJavaMethod m, boolean allowOptimisticAssumptions) {
return installer.makeGraph(m, null, inliningPolicy.get(), FrameStateProcessing.CollapseFrameForSingleSideEffect);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.replacements;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.meta.MetaUtil.*;
import static com.oracle.graal.compiler.GraalCompiler.*;
import static com.oracle.graal.compiler.common.GraalOptions.*;
@@ -287,7 +288,7 @@
// Do deferred intrinsification of node intrinsics
createNodeIntrinsificationPhase().apply(specializedSnippet);
- new CanonicalizerPhase(true).apply(specializedSnippet, new PhaseContext(providers, assumptions));
+ new CanonicalizerPhase(true).apply(specializedSnippet, new PhaseContext(providers));
NodeIntrinsificationVerificationPhase.verify(specializedSnippet);
}
@@ -612,20 +613,22 @@
* Builds the initial graph for a snippet.
*/
protected StructuredGraph buildInitialGraph(final ResolvedJavaMethod methodToParse) {
- final StructuredGraph graph = new StructuredGraph(methodToParse);
+ // Replacements cannot have optimistic assumptions since they have
+ // to be valid for the entire run of the VM.
+ final StructuredGraph graph = new StructuredGraph(methodToParse, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
try (Scope s = Debug.scope("buildInitialGraph", graph)) {
MetaAccessProvider metaAccess = replacements.providers.getMetaAccess();
if (MethodsElidedInSnippets != null && methodToParse.getSignature().getReturnKind() == Kind.Void && MethodFilter.matches(MethodsElidedInSnippets, methodToParse)) {
graph.addAfterFixed(graph.start(), graph.add(new ReturnNode(null)));
} else {
- createGraphBuilder(metaAccess, replacements.providers.getStampProvider(), replacements.assumptions, replacements.providers.getConstantReflection(),
- GraphBuilderConfiguration.getSnippetDefault(), OptimisticOptimizations.NONE).apply(graph);
+ createGraphBuilder(metaAccess, replacements.providers.getStampProvider(), replacements.providers.getConstantReflection(), GraphBuilderConfiguration.getSnippetDefault(),
+ OptimisticOptimizations.NONE).apply(graph);
}
afterParsing(graph);
if (OptCanonicalizer.getValue()) {
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(replacements.providers, replacements.assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(replacements.providers));
}
} catch (Throwable e) {
throw Debug.handle(e);
@@ -633,9 +636,9 @@
return graph;
}
- protected Instance createGraphBuilder(MetaAccessProvider metaAccess, StampProvider stampProvider, Assumptions assumptions, ConstantReflectionProvider constantReflection,
- GraphBuilderConfiguration graphBuilderConfig, OptimisticOptimizations optimisticOpts) {
- return new GraphBuilderPhase.Instance(metaAccess, stampProvider, assumptions, constantReflection, graphBuilderConfig, optimisticOpts);
+ protected Instance createGraphBuilder(MetaAccessProvider metaAccess, StampProvider stampProvider, ConstantReflectionProvider constantReflection, GraphBuilderConfiguration graphBuilderConfig,
+ OptimisticOptimizations optimisticOpts) {
+ return new GraphBuilderPhase.Instance(metaAccess, stampProvider, constantReflection, graphBuilderConfig, optimisticOpts);
}
protected void afterParsing(StructuredGraph graph) {
@@ -657,7 +660,7 @@
*/
protected void afterInline(StructuredGraph caller, StructuredGraph callee, Object beforeInlineData) {
if (OptCanonicalizer.getValue()) {
- new CanonicalizerPhase(true).apply(caller, new PhaseContext(replacements.providers, replacements.assumptions));
+ new CanonicalizerPhase(true).apply(caller, new PhaseContext(replacements.providers));
}
}
@@ -668,7 +671,7 @@
replacements.createNodeIntrinsificationPhase().apply(graph);
new DeadCodeEliminationPhase(Optional).apply(graph);
if (OptCanonicalizer.getValue()) {
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(replacements.providers, replacements.assumptions));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(replacements.providers));
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.replacements;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.meta.LocationIdentity.*;
import static com.oracle.graal.compiler.common.GraalOptions.*;
import static com.oracle.graal.debug.Debug.*;
@@ -561,10 +562,10 @@
ResolvedJavaMethod method = snippetGraph.method();
Signature signature = method.getSignature();
- PhaseContext phaseContext = new PhaseContext(providers, new Assumptions(false));
+ PhaseContext phaseContext = new PhaseContext(providers);
// Copy snippet graph, replacing constant parameters with given arguments
- final StructuredGraph snippetCopy = new StructuredGraph(snippetGraph.name, snippetGraph.method());
+ final StructuredGraph snippetCopy = new StructuredGraph(snippetGraph.name, snippetGraph.method(), DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
Map nodeReplacements = Node.newIdentityMap();
nodeReplacements.put(snippetGraph.start(), snippetCopy.start());
@@ -1245,7 +1246,7 @@
// Inline the snippet nodes, replacing parameters with the given args in the process
String name = snippet.name == null ? "{copy}" : snippet.name + "{copy}";
- StructuredGraph snippetCopy = new StructuredGraph(name, snippet.method());
+ StructuredGraph snippetCopy = new StructuredGraph(name, snippet.method(), DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
StartNode entryPointNode = snippet.start();
FixedNode firstCFGNode = entryPointNode.next();
StructuredGraph replaceeGraph = replacee.graph();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -61,7 +61,7 @@
/*
* Looks at the given stamp and determines if it is an exact type (or can be assumed to be an
* exact type) and if it is a cloneable type.
- *
+ *
* If yes, then the exact type is returned, otherwise it returns null.
*/
protected static ResolvedJavaType getConcreteType(Stamp stamp, Assumptions assumptions, MetaAccessProvider metaAccess) {
@@ -105,7 +105,7 @@
} else {
obj = tool.getReplacedValue(getObject());
}
- ResolvedJavaType type = getConcreteType(obj.stamp(), tool.getAssumptions(), tool.getMetaAccessProvider());
+ ResolvedJavaType type = getConcreteType(obj.stamp(), graph().getAssumptions(), tool.getMetaAccessProvider());
if (type != null && !type.isArray()) {
VirtualInstanceNode newVirtual = createVirtualInstanceNode(type, true);
ResolvedJavaField[] fields = newVirtual.getFields();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -129,7 +129,7 @@
* @param replacementGraph a replacement (i.e., snippet or method substitution) graph
*/
protected StructuredGraph lowerReplacement(final StructuredGraph replacementGraph, LoweringTool tool) {
- final PhaseContext c = new PhaseContext(tool.getMetaAccess(), tool.getConstantReflection(), tool.getLowerer(), tool.getReplacements(), tool.assumptions(), tool.getStampProvider());
+ final PhaseContext c = new PhaseContext(tool.getMetaAccess(), tool.getConstantReflection(), tool.getLowerer(), tool.getReplacements(), tool.getStampProvider());
if (!graph().hasValueProxies()) {
new RemoveValueProxyPhase().apply(replacementGraph);
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.truffle.hotspot;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.code.CodeUtil.*;
import static com.oracle.graal.compiler.GraalCompiler.*;
import static com.oracle.graal.graph.util.CollectionsAccess.*;
@@ -178,9 +179,8 @@
Suites suites = suitesProvider.createSuites();
LowLevelSuites lowLevelSuites = suitesProvider.createLowLevelSuites();
removeInliningPhase(suites);
- StructuredGraph graph = new StructuredGraph(javaMethod);
- new GraphBuilderPhase.Instance(metaAccess, providers.getStampProvider(), new Assumptions(false), providers.getConstantReflection(), GraphBuilderConfiguration.getEagerDefault(),
- OptimisticOptimizations.ALL).apply(graph);
+ StructuredGraph graph = new StructuredGraph(javaMethod, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ new GraphBuilderPhase.Instance(metaAccess, providers.getStampProvider(), providers.getConstantReflection(), GraphBuilderConfiguration.getEagerDefault(), OptimisticOptimizations.ALL).apply(graph);
PhaseSuite graphBuilderSuite = getGraphBuilderSuite(suitesProvider);
CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, graph.method(), false);
Backend backend = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend();
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,9 +22,10 @@
*/
package com.oracle.graal.truffle.test;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import org.junit.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.compiler.test.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
@@ -53,18 +54,16 @@
}
protected OptimizedCallTarget compileHelper(String methodName, RootNode root, Object[] arguments) {
- Assumptions assumptions = new Assumptions(true);
final OptimizedCallTarget compilable = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(root);
- StructuredGraph actual = partialEval(compilable, arguments, assumptions);
- truffleCompiler.compileMethodHelper(actual, assumptions, methodName, null, getSpeculationLog(), compilable);
+ StructuredGraph actual = partialEval(compilable, arguments, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ truffleCompiler.compileMethodHelper(actual, methodName, null, getSpeculationLog(), compilable);
return compilable;
}
protected OptimizedCallTarget assertPartialEvalEquals(String methodName, RootNode root, Object[] arguments) {
- Assumptions assumptions = new Assumptions(true);
final OptimizedCallTarget compilable = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(root);
- StructuredGraph actual = partialEval(compilable, arguments, assumptions);
- truffleCompiler.compileMethodHelper(actual, assumptions, methodName, null, getSpeculationLog(), compilable);
+ StructuredGraph actual = partialEval(compilable, arguments, ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ truffleCompiler.compileMethodHelper(actual, methodName, null, getSpeculationLog(), compilable);
removeFrameStates(actual);
StructuredGraph expected = parseForComparison(methodName);
Assert.assertEquals(getCanonicalGraphString(expected, true, true), getCanonicalGraphString(actual, true, true));
@@ -76,23 +75,22 @@
}
protected void assertPartialEvalNoInvokes(RootNode root, Object[] arguments) {
- Assumptions assumptions = new Assumptions(true);
final OptimizedCallTarget compilable = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(root);
- StructuredGraph actual = partialEval(compilable, arguments, assumptions);
+ StructuredGraph actual = partialEval(compilable, arguments, ALLOW_OPTIMISTIC_ASSUMPTIONS);
removeFrameStates(actual);
for (MethodCallTargetNode node : actual.getNodes(MethodCallTargetNode.class)) {
Assert.fail("Found invalid method call target node: " + node);
}
}
- protected StructuredGraph partialEval(OptimizedCallTarget compilable, Object[] arguments, final Assumptions assumptions) {
+ protected StructuredGraph partialEval(OptimizedCallTarget compilable, Object[] arguments, boolean allowOptimisticAssumptions) {
// Executed AST so that all classes are loaded and initialized.
compilable.call(arguments);
compilable.call(arguments);
compilable.call(arguments);
try (Scope s = Debug.scope("TruffleCompilation", new TruffleDebugJavaMethod(compilable))) {
- return truffleCompiler.getPartialEvaluator().createGraph(compilable, assumptions, null);
+ return truffleCompiler.getPartialEvaluator().createGraph(compilable, allowOptimisticAssumptions, null);
} catch (Throwable e) {
throw Debug.handle(e);
}
@@ -103,13 +101,13 @@
frameState.replaceAtUsages(null);
frameState.safeDelete();
}
- new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false)));
+ new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders()));
new DeadCodeEliminationPhase().apply(graph);
}
protected StructuredGraph parseForComparison(final String methodName) {
try (Scope s = Debug.scope("Truffle", new DebugDumpScope("Comparison: " + methodName))) {
- StructuredGraph graph = parseEager(methodName);
+ StructuredGraph graph = parseEager(methodName, ALLOW_OPTIMISTIC_ASSUMPTIONS);
compile(graph.method(), graph);
return graph;
} catch (Throwable e) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Wed Feb 11 10:13:08 2015 +0100
@@ -96,7 +96,7 @@
}
}
- public StructuredGraph createGraph(final OptimizedCallTarget callTarget, final Assumptions assumptions, GraphBuilderPlugins graalPlugins) {
+ public StructuredGraph createGraph(final OptimizedCallTarget callTarget, boolean allowOptimisticAssumptions, GraphBuilderPlugins graalPlugins) {
if (TraceTruffleCompilationHistogram.getValue() || TraceTruffleCompilationDetails.getValue()) {
constantReceivers = new HashSet<>();
}
@@ -107,7 +107,7 @@
throw Debug.handle(e);
}
- final StructuredGraph graph = new StructuredGraph(callTarget.toString(), callRootMethod);
+ final StructuredGraph graph = new StructuredGraph(callTarget.toString(), callRootMethod, allowOptimisticAssumptions);
assert graph != null : "no graph for root method";
try (Scope s = Debug.scope("CreateGraph", graph); Indent indent = Debug.logAndIndent("createGraph %s", graph)) {
@@ -116,14 +116,14 @@
if (CacheGraphs.getValue()) {
graphCache = new HashMap<>();
}
- PhaseContext baseContext = new PhaseContext(providers, assumptions);
- HighTierContext tierContext = new HighTierContext(providers, assumptions, graphCache, new PhaseSuite(), OptimisticOptimizations.NONE);
+ PhaseContext baseContext = new PhaseContext(providers);
+ HighTierContext tierContext = new HighTierContext(providers, graphCache, new PhaseSuite(), OptimisticOptimizations.NONE);
if (TruffleCompilerOptions.FastPE.getValue()) {
- fastPartialEvaluation(callTarget, assumptions, graph, baseContext, tierContext, graalPlugins);
+ fastPartialEvaluation(callTarget, graph, baseContext, tierContext, graalPlugins);
} else {
createRootGraph(graph);
- partialEvaluation(callTarget, assumptions, graph, baseContext, tierContext);
+ partialEvaluation(callTarget, graph, baseContext, tierContext);
}
if (Thread.currentThread().isInterrupted()) {
@@ -206,7 +206,7 @@
}
@SuppressWarnings("unused")
- private void fastPartialEvaluation(OptimizedCallTarget callTarget, Assumptions assumptions, StructuredGraph graph, PhaseContext baseContext, HighTierContext tierContext,
+ private void fastPartialEvaluation(OptimizedCallTarget callTarget, StructuredGraph graph, PhaseContext baseContext, HighTierContext tierContext,
GraphBuilderPlugins graalPlugins) {
GraphBuilderConfiguration newConfig = configForRoot.copy();
newConfig.setLoadFieldPlugin(new InterceptLoadFieldPlugin());
@@ -216,7 +216,7 @@
DefaultGraphBuilderPlugins plugins = graalPlugins == null ? new DefaultGraphBuilderPlugins() : graalPlugins.copy();
TruffleGraphBuilderPlugins.registerPlugins(providers.getMetaAccess(), plugins);
long ms = System.currentTimeMillis();
- new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), new Assumptions(true), this.snippetReflection, providers.getConstantReflection(), newConfig, plugins,
+ new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), this.snippetReflection, providers.getConstantReflection(), newConfig, plugins,
TruffleCompilerImpl.Optimizations).apply(graph);
System.out.println("# ms: " + (System.currentTimeMillis() - ms));
Debug.dump(graph, "After FastPE");
@@ -230,7 +230,7 @@
}
}
- private void partialEvaluation(final OptimizedCallTarget callTarget, final Assumptions assumptions, final StructuredGraph graph, PhaseContext baseContext, HighTierContext tierContext) {
+ private void partialEvaluation(final OptimizedCallTarget callTarget, final StructuredGraph graph, PhaseContext baseContext, HighTierContext tierContext) {
injectConstantCallTarget(graph, callTarget, baseContext);
Debug.dump(graph, "Before expansion");
@@ -240,7 +240,7 @@
expansionLogger = new TruffleExpansionLogger(providers, graph);
}
- expandTree(graph, assumptions, expansionLogger);
+ expandTree(graph, expansionLogger);
TruffleInliningCache inliningCache = null;
if (TruffleFunctionInlining.getValue()) {
@@ -250,7 +250,7 @@
}
}
- expandDirectCalls(graph, assumptions, expansionLogger, callTarget.getInlining(), inliningCache);
+ expandDirectCalls(graph, expansionLogger, callTarget.getInlining(), inliningCache);
if (Thread.currentThread().isInterrupted()) {
return;
@@ -265,7 +265,7 @@
} catch (Throwable t) {
Debug.handle(t);
}
- } while (expandTree(graph, assumptions, expansionLogger));
+ } while (expandTree(graph, expansionLogger));
if (expansionLogger != null) {
expansionLogger.print(callTarget);
@@ -273,15 +273,13 @@
}
public StructuredGraph createRootGraph(StructuredGraph graph) {
- new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), new Assumptions(false), providers.getConstantReflection(), configForRoot,
- TruffleCompilerImpl.Optimizations).apply(graph);
+ new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), providers.getConstantReflection(), configForRoot, TruffleCompilerImpl.Optimizations).apply(graph);
return graph;
}
- public StructuredGraph createInlineGraph(String name) {
- StructuredGraph graph = new StructuredGraph(name, callInlinedMethod);
- new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), new Assumptions(false), providers.getConstantReflection(), configForRoot,
- TruffleCompilerImpl.Optimizations).apply(graph);
+ public StructuredGraph createInlineGraph(String name, StructuredGraph caller) {
+ StructuredGraph graph = new StructuredGraph(name, callInlinedMethod, caller.getAssumptions().useOptimisticAssumptions());
+ new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), providers.getConstantReflection(), configForRoot, TruffleCompilerImpl.Optimizations).apply(graph);
return graph;
}
@@ -337,8 +335,8 @@
new DebugHistogramAsciiPrinter(TTY.out().out()).print(histogram);
}
- private boolean expandTree(StructuredGraph graph, Assumptions assumptions, TruffleExpansionLogger expansionLogger) {
- PhaseContext phaseContext = new PhaseContext(providers, assumptions);
+ private boolean expandTree(StructuredGraph graph, TruffleExpansionLogger expansionLogger) {
+ PhaseContext phaseContext = new PhaseContext(providers);
boolean changed = false;
boolean changedInIteration;
ArrayDeque queue = new ArrayDeque<>();
@@ -479,18 +477,18 @@
}
}
- private void expandDirectCalls(StructuredGraph graph, Assumptions assumptions, TruffleExpansionLogger expansionLogger, TruffleInlining inlining, TruffleInliningCache inliningCache) {
- PhaseContext phaseContext = new PhaseContext(providers, assumptions);
+ private void expandDirectCalls(StructuredGraph graph, TruffleExpansionLogger expansionLogger, TruffleInlining inlining, TruffleInliningCache inliningCache) {
+ PhaseContext phaseContext = new PhaseContext(providers);
for (MethodCallTargetNode methodCallTargetNode : graph.getNodes(MethodCallTargetNode.class).snapshot()) {
- StructuredGraph inlineGraph = parseDirectCallGraph(phaseContext, assumptions, inlining, inliningCache, methodCallTargetNode);
+ StructuredGraph inlineGraph = parseDirectCallGraph(phaseContext, graph, inlining, inliningCache, methodCallTargetNode);
if (inlineGraph != null) {
expandTreeInline(graph, phaseContext, expansionLogger, methodCallTargetNode, inlineGraph);
}
}
// non inlined direct calls need to be expanded until TruffleCallBoundary.
- expandTree(graph, assumptions, expansionLogger);
+ expandTree(graph, expansionLogger);
assert noDirectCallsLeft(graph);
}
@@ -503,7 +501,7 @@
return true;
}
- private StructuredGraph parseDirectCallGraph(PhaseContext phaseContext, Assumptions assumptions, TruffleInlining inlining, TruffleInliningCache inliningCache,
+ private StructuredGraph parseDirectCallGraph(PhaseContext phaseContext, StructuredGraph caller, TruffleInlining inlining, TruffleInliningCache inliningCache,
MethodCallTargetNode methodCallTargetNode) {
OptimizedDirectCallNode callNode = resolveConstantCallNode(methodCallTargetNode);
if (callNode == null) {
@@ -532,13 +530,13 @@
StructuredGraph graph;
if (decision != null && decision.isInline()) {
if (inliningCache == null) {
- graph = createInlineGraph(phaseContext, assumptions, null, decision);
+ graph = createInlineGraph(phaseContext, caller, null, decision);
} else {
- graph = inliningCache.getCachedGraph(phaseContext, assumptions, decision);
+ graph = inliningCache.getCachedGraph(phaseContext, caller, decision);
}
decision.getProfile().setGraalDeepNodeCount(graph.getNodeCount());
- assumptions.record(new AssumptionValidAssumption((OptimizedAssumption) decision.getTarget().getNodeRewritingAssumption()));
+ caller.getAssumptions().record(new AssumptionValidAssumption((OptimizedAssumption) decision.getTarget().getNodeRewritingAssumption()));
} else {
// we continue expansion of callDirect until we reach the callBoundary.
graph = parseGraph(methodCallTargetNode.targetMethod(), methodCallTargetNode.arguments(), phaseContext);
@@ -587,17 +585,17 @@
return (OptimizedDirectCallNode) value;
}
- private StructuredGraph createInlineGraph(PhaseContext phaseContext, Assumptions assumptions, TruffleInliningCache cache, TruffleInliningDecision decision) {
+ private StructuredGraph createInlineGraph(PhaseContext phaseContext, StructuredGraph caller, TruffleInliningCache cache, TruffleInliningDecision decision) {
try (Scope s = Debug.scope("GuestLanguageInlinedGraph", new DebugDumpScope(decision.getTarget().toString()))) {
OptimizedCallTarget target = decision.getTarget();
- StructuredGraph inlineGraph = createInlineGraph(target.toString());
+ StructuredGraph inlineGraph = createInlineGraph(target.toString(), caller);
injectConstantCallTarget(inlineGraph, decision.getTarget(), phaseContext);
TruffleExpansionLogger expansionLogger = null;
if (TraceTruffleExpansion.getValue()) {
expansionLogger = new TruffleExpansionLogger(providers, inlineGraph);
}
- expandTree(inlineGraph, assumptions, expansionLogger);
- expandDirectCalls(inlineGraph, assumptions, expansionLogger, decision, cache);
+ expandTree(inlineGraph, expansionLogger);
+ expandDirectCalls(inlineGraph, expansionLogger, decision, cache);
if (expansionLogger != null) {
expansionLogger.print(target);
@@ -628,11 +626,11 @@
this.cache = new HashMap<>();
}
- public StructuredGraph getCachedGraph(PhaseContext phaseContext, Assumptions assumptions, TruffleInliningDecision decision) {
+ public StructuredGraph getCachedGraph(PhaseContext phaseContext, StructuredGraph caller, TruffleInliningDecision decision) {
CacheKey cacheKey = new CacheKey(decision);
StructuredGraph inlineGraph = cache.get(cacheKey);
if (inlineGraph == null) {
- inlineGraph = createInlineGraph(phaseContext, assumptions, this, decision);
+ inlineGraph = createInlineGraph(phaseContext, caller, this, decision);
cache.put(cacheKey, inlineGraph);
}
return inlineGraph;
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,10 +22,11 @@
*/
package com.oracle.graal.truffle;
+import static com.oracle.graal.api.code.Assumptions.*;
+
import java.util.*;
import java.util.Map.Entry;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.debug.*;
import com.oracle.graal.debug.Debug.Scope;
@@ -60,7 +61,7 @@
private final HashMap, StructuredGraph> cache = new HashMap<>();
private final HashMap, Long> lastUsed = new HashMap<>();
- private final StructuredGraph markerGraph = new StructuredGraph();
+ private final StructuredGraph markerGraph = new StructuredGraph(DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
private final ResolvedJavaType stringBuilderClass;
private final ResolvedJavaType runtimeExceptionClass;
@@ -119,11 +120,11 @@
lookupExceedsMaxSize();
}
- StructuredGraph graph;
- PhaseContext phaseContext = new PhaseContext(providers, new Assumptions(false));
+ StructuredGraph graph = new StructuredGraph(method, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
+ PhaseContext phaseContext = new PhaseContext(providers);
try (Scope s = Debug.scope("TruffleCache", providers.getMetaAccess(), method)) {
- graph = parseGraph(method, phaseContext);
+ graph = parseGraph(graph, phaseContext);
if (graph == null) {
return null;
}
@@ -268,9 +269,8 @@
canonicalizer.applyIncremental(graph, phaseContext, canonicalizerUsages);
}
- protected StructuredGraph parseGraph(final ResolvedJavaMethod method, final PhaseContext phaseContext) {
- final StructuredGraph graph = new StructuredGraph(method);
- new GraphBuilderPhase.Instance(phaseContext.getMetaAccess(), phaseContext.getStampProvider(), phaseContext.getAssumptions(), null, config, optimisticOptimizations).apply(graph);
+ protected StructuredGraph parseGraph(StructuredGraph graph, final PhaseContext phaseContext) {
+ new GraphBuilderPhase.Instance(phaseContext.getMetaAccess(), phaseContext.getStampProvider(), null, config, optimisticOptimizations).apply(graph);
return graph;
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.truffle;
+import static com.oracle.graal.api.code.Assumptions.*;
import static com.oracle.graal.api.code.CodeUtil.*;
import static com.oracle.graal.compiler.GraalCompiler.*;
@@ -119,11 +120,10 @@
compilationNotify.notifyCompilationStarted(compilable);
try {
- Assumptions assumptions = new Assumptions(true);
GraphBuilderSuiteInfo info = createGraphBuilderSuite();
try (TimerCloseable a = PartialEvaluationTime.start(); Closeable c = PartialEvaluationMemUse.start()) {
- graph = partialEvaluator.createGraph(compilable, assumptions, info.plugins);
+ graph = partialEvaluator.createGraph(compilable, info.plugins);
}
if (Thread.currentThread().isInterrupted()) {
@@ -138,7 +138,7 @@
}
compilationNotify.notifyCompilationTruffleTierFinished(compilable, graph);
- CompilationResult compilationResult = compileMethodHelper(graph, assumptions, compilable.toString(), info.suite, compilable.getSpeculationLog(), compilable);
+ CompilationResult compilationResult = compileMethodHelper(graph, compilable.toString(), info.suite, compilable.getSpeculationLog(), compilable);
compilationNotify.notifyCompilationSuccess(compilable, graph, compilationResult);
} catch (Throwable t) {
compilationNotify.notifyCompilationFailed(compilable, graph, t);
@@ -146,7 +146,7 @@
}
}
- public CompilationResult compileMethodHelper(StructuredGraph graph, Assumptions assumptions, String name, PhaseSuite graphBuilderSuite, SpeculationLog speculationLog,
+ public CompilationResult compileMethodHelper(StructuredGraph graph, String name, PhaseSuite graphBuilderSuite, SpeculationLog speculationLog,
InstalledCode predefinedInstalledCode) {
try (Scope s = Debug.scope("TruffleFinal")) {
Debug.dump(1, graph, "After TruffleTier");
@@ -169,10 +169,8 @@
List validAssumptions = new ArrayList<>();
Assumptions newAssumptions = new Assumptions(true);
- if (assumptions != null) {
- for (Assumption assumption : assumptions.getAssumptions()) {
- processAssumption(newAssumptions, assumption, validAssumptions);
- }
+ for (Assumption assumption : graph.getAssumptions().getAssumptions()) {
+ processAssumption(newAssumptions, assumption, validAssumptions);
}
if (result.getAssumptions() != null) {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionNode.java
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -22,6 +22,7 @@
*/
package com.oracle.graal.truffle.nodes;
+import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.api.replacements.*;
import com.oracle.graal.api.runtime.*;
@@ -62,14 +63,15 @@
@Override
public void simplify(SimplifierTool tool) {
ValueNode assumption = getAssumption();
- if (tool.assumptions() != null && assumption.isConstant()) {
+ Assumptions assumptions = graph().getAssumptions();
+ if (assumption.isConstant()) {
JavaConstant c = assumption.asJavaConstant();
assert c.getKind() == Kind.Object;
Object object = getSnippetReflection().asObject(Object.class, c);
OptimizedAssumption assumptionObject = (OptimizedAssumption) object;
StructuredGraph graph = graph();
if (assumptionObject.isValid()) {
- tool.assumptions().record(new AssumptionValidAssumption(assumptionObject));
+ assumptions.record(new AssumptionValidAssumption(assumptionObject));
if (super.getReturnType().getKind() == Kind.Boolean) {
graph.replaceFixedWithFloating(this, ConstantNode.forBoolean(true, graph()));
} else {
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Wed Feb 11 10:13:08 2015 +0100
@@ -172,7 +172,7 @@
for (int i = 0; i < frameSize; i++) {
primitiveArrayEntryState[i] = initialPrimitiveValue(frameDescriptor.getSlots().get(i).getKind());
}
- tool.getAssumptions().record(new AssumptionValidAssumption((OptimizedAssumption) frameDescriptor.getVersion()));
+ graph().getAssumptions().record(new AssumptionValidAssumption((OptimizedAssumption) frameDescriptor.getVersion()));
}
tool.createVirtualObject(virtualFrameObjectArray, objectArrayEntryState, Collections. emptyList());
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java Wed Feb 11 10:13:08 2015 +0100
@@ -26,7 +26,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -39,8 +38,8 @@
public class PEReadEliminationClosure extends PartialEscapeClosure {
- public PEReadEliminationClosure(SchedulePhase schedule, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, Assumptions assumptions) {
- super(schedule, metaAccess, constantReflection, assumptions);
+ public PEReadEliminationClosure(SchedulePhase schedule, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection) {
+ super(schedule, metaAccess, constantReflection);
}
@Override
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Wed Feb 11 10:13:08 2015 +0100
@@ -24,7 +24,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.compiler.common.*;
import com.oracle.graal.compiler.common.type.*;
@@ -94,8 +93,8 @@
*/
public static final class Final extends PartialEscapeClosure {
- public Final(SchedulePhase schedule, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, Assumptions assumptions) {
- super(schedule, metaAccess, constantReflection, assumptions);
+ public Final(SchedulePhase schedule, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection) {
+ super(schedule, metaAccess, constantReflection);
}
@Override
@@ -109,10 +108,10 @@
}
}
- public PartialEscapeClosure(SchedulePhase schedule, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, Assumptions assumptions) {
+ public PartialEscapeClosure(SchedulePhase schedule, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection) {
super(schedule, schedule.getCFG());
this.usages = schedule.getCFG().graph.createNodeBitMap();
- this.tool = new VirtualizerToolImpl(metaAccess, constantReflection, assumptions, this);
+ this.tool = new VirtualizerToolImpl(metaAccess, constantReflection, this);
}
/**
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java Wed Feb 11 10:13:08 2015 +0100
@@ -89,9 +89,9 @@
protected Closure> createEffectsClosure(PhaseContext context, SchedulePhase schedule, ControlFlowGraph cfg) {
assert schedule != null;
if (readElimination) {
- return new PEReadEliminationClosure(schedule, context.getMetaAccess(), context.getConstantReflection(), context.getAssumptions());
+ return new PEReadEliminationClosure(schedule, context.getMetaAccess(), context.getConstantReflection());
} else {
- return new PartialEscapeClosure.Final(schedule, context.getMetaAccess(), context.getConstantReflection(), context.getAssumptions());
+ return new PartialEscapeClosure.Final(schedule, context.getMetaAccess(), context.getConstantReflection());
}
}
diff -r ec8402f4e00a -r 8ab925a6f724 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Mon Feb 09 11:31:53 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Wed Feb 11 10:13:08 2015 +0100
@@ -26,7 +26,6 @@
import java.util.*;
-import com.oracle.graal.api.code.*;
import com.oracle.graal.api.meta.*;
import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.*;
@@ -41,13 +40,11 @@
private final MetaAccessProvider metaAccess;
private final ConstantReflectionProvider constantReflection;
- private final Assumptions assumptions;
private final PartialEscapeClosure> closure;
- VirtualizerToolImpl(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, Assumptions assumptions, PartialEscapeClosure> closure) {
+ VirtualizerToolImpl(MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection, PartialEscapeClosure> closure) {
this.metaAccess = metaAccess;
this.constantReflection = constantReflection;
- this.assumptions = assumptions;
this.closure = closure;
}
@@ -66,11 +63,6 @@
return constantReflection;
}
- @Override
- public Assumptions getAssumptions() {
- return assumptions;
- }
-
public void reset(PartialEscapeBlockState> newState, ValueNode newCurrent, FixedNode newPosition, GraphEffectList newEffects) {
deleted = false;
state = newState;