# HG changeset patch # User Doug Simon # Date 1371651252 -7200 # Node ID cd63140aaad7eb450e3a94625ab35f5f2424285a # Parent 67fa9b3e10ed8027d66c30f383546864faf32a2f# Parent 97e8cabe9064de191fe9a1a29fa7fdd4b22face3 Merge. diff -r 67fa9b3e10ed -r cd63140aaad7 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 Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/EliminateNestedCheckCastsTest.java Wed Jun 19 16:14:12 2013 +0200 @@ -24,9 +24,7 @@ import java.util.concurrent.*; -import junit.framework.Assert; - -import org.junit.Test; +import org.junit.*; import com.oracle.graal.api.code.*; import com.oracle.graal.debug.*; diff -r 67fa9b3e10ed -r cd63140aaad7 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 Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Wed Jun 19 16:14:12 2013 +0200 @@ -22,9 +22,7 @@ */ package com.oracle.graal.compiler.test; -import junit.framework.Assert; - -import org.junit.Test; +import org.junit.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r 67fa9b3e10ed -r cd63140aaad7 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 Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java Wed Jun 19 16:14:12 2013 +0200 @@ -24,14 +24,12 @@ import java.io.*; -import junit.framework.Assert; - -import org.junit.Test; +import org.junit.*; import com.oracle.graal.api.code.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; -import com.oracle.graal.graph.Node.*; +import com.oracle.graal.graph.Node.Verbosity; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.java.*; diff -r 67fa9b3e10ed -r cd63140aaad7 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Wed Jun 19 16:14:12 2013 +0200 @@ -24,9 +24,7 @@ import java.util.concurrent.*; -import junit.framework.Assert; - -import org.junit.Test; +import org.junit.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r 67fa9b3e10ed -r cd63140aaad7 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java Wed Jun 19 16:14:12 2013 +0200 @@ -24,9 +24,7 @@ import java.util.concurrent.*; -import junit.framework.Assert; - -import org.junit.Test; +import org.junit.*; import com.oracle.graal.api.code.*; import com.oracle.graal.compiler.test.*; diff -r 67fa9b3e10ed -r cd63140aaad7 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 Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Wed Jun 19 16:14:12 2013 +0200 @@ -38,7 +38,6 @@ import com.oracle.graal.phases.common.*; import com.oracle.graal.test.*; -@SuppressWarnings("unused") public class InliningTest extends GraalCompilerTest { @Test @@ -62,6 +61,14 @@ assertInlined(getGraph("invokeConstructorSnippet", false)); assertInlined(getGraph("invokeFinalMethodSnippet", false)); assertInlined(getGraph("invokeMethodOnFinalClassSnippet", false)); + assertInlined(getGraph("invokeMethodOnStaticFinalFieldSnippet", false)); + } + + @Ignore("would need read elimination/EA before inlining") + @Test + public void testDependentStaticBindableInlining() { + assertInlined(getGraph("invokeMethodOnFinalFieldSnippet", false)); + assertInlined(getGraph("invokeMethodOnFieldSnippet", false)); } @LongTest @@ -69,6 +76,14 @@ assertManyMethodInfopoints(assertInlined(getGraph("invokeConstructorSnippet", true))); assertManyMethodInfopoints(assertInlined(getGraph("invokeFinalMethodSnippet", true))); assertManyMethodInfopoints(assertInlined(getGraph("invokeMethodOnFinalClassSnippet", true))); + assertManyMethodInfopoints(assertInlined(getGraph("invokeMethodOnStaticFinalFieldSnippet", true))); + } + + @Ignore("would need read elimination/EA before inlining") + @LongTest + public void testDependentStaticBindableInliningIP() { + assertManyMethodInfopoints(assertInlined(getGraph("invokeMethodOnFinalFieldSnippet", true))); + assertManyMethodInfopoints(assertInlined(getGraph("invokeMethodOnFieldSnippet", true))); } @SuppressWarnings("all") @@ -88,6 +103,30 @@ finalSubClass.protectedNotOverriddenMethod() + finalSubClass.protectedOverriddenMethod(); } + @SuppressWarnings("all") + public static int invokeMethodOnStaticFinalFieldSnippet() { + return StaticFinalFields.NumberStaticFinalField.intValue() + StaticFinalFields.SuperClassStaticFinalField.publicOverriddenMethod() + + StaticFinalFields.FinalSubClassStaticFinalField.publicOverriddenMethod() + StaticFinalFields.SingleImplementorStaticFinalField.publicOverriddenMethod() + + StaticFinalFields.MultipleImplementorsStaticFinalField.publicOverriddenMethod() + StaticFinalFields.SubClassAStaticFinalField.publicOverriddenMethod() + + StaticFinalFields.SubClassBStaticFinalField.publicOverriddenMethod() + StaticFinalFields.SubClassCStaticFinalField.publicOverriddenMethod(); + } + + @SuppressWarnings("all") + public static int invokeMethodOnFinalFieldSnippet() { + FinalFields fields = new FinalFields(); + return fields.numberFinalField.intValue() + fields.superClassFinalField.publicOverriddenMethod() + fields.finalSubClassFinalField.publicOverriddenMethod() + + fields.singleImplementorFinalField.publicOverriddenMethod() + fields.multipleImplementorsFinalField.publicOverriddenMethod() + + fields.subClassAFinalField.publicOverriddenMethod() + fields.subClassBFinalField.publicOverriddenMethod() + fields.subClassCFinalField.publicOverriddenMethod(); + } + + @SuppressWarnings("all") + public static int invokeMethodOnFieldSnippet() { + Fields fields = new Fields(); + return fields.numberField.intValue() + fields.superClassField.publicOverriddenMethod() + fields.finalSubClassField.publicOverriddenMethod() + + fields.singleImplementorField.publicOverriddenMethod() + fields.multipleImplementorsField.publicOverriddenMethod() + fields.subClassAField.publicOverriddenMethod() + + fields.subClassBField.publicOverriddenMethod() + fields.subClassCField.publicOverriddenMethod(); + } + @Test public void testClassHierarchyAnalysis() { assertInlined(getGraph("invokeLeafClassMethodSnippet", false)); @@ -159,6 +198,7 @@ PhasePlan phasePlan = getDefaultPhasePlan(eagerInfopointMode); Assumptions assumptions = new Assumptions(true); Debug.dump(graph, "Graph"); + new CanonicalizerPhase.Instance(runtime(), assumptions, true).apply(graph); new InliningPhase(runtime(), null, replacements, assumptions, null, phasePlan, OptimisticOptimizations.ALL).apply(graph); Debug.dump(graph, "Graph"); new CanonicalizerPhase.Instance(runtime(), assumptions, true).apply(graph); @@ -339,4 +379,40 @@ return value * 5; } } + + private static final class StaticFinalFields { + + private static final Number NumberStaticFinalField = new Integer(1); + private static final SuperClass SuperClassStaticFinalField = new SubClassA(2); + private static final FinalSubClass FinalSubClassStaticFinalField = new FinalSubClass(3); + private static final SingleImplementorInterface SingleImplementorStaticFinalField = new SubClassA(4); + private static final MultipleImplementorsInterface MultipleImplementorsStaticFinalField = new SubClassC(5); + private static final SubClassA SubClassAStaticFinalField = new SubClassA(6); + private static final SubClassB SubClassBStaticFinalField = new SubClassB(7); + private static final SubClassC SubClassCStaticFinalField = new SubClassC(8); + } + + private static final class FinalFields { + + private final Number numberFinalField = new Integer(1); + private final SuperClass superClassFinalField = new SubClassA(2); + private final FinalSubClass finalSubClassFinalField = new FinalSubClass(3); + private final SingleImplementorInterface singleImplementorFinalField = new SubClassA(4); + private final MultipleImplementorsInterface multipleImplementorsFinalField = new SubClassC(5); + private final SubClassA subClassAFinalField = new SubClassA(6); + private final SubClassB subClassBFinalField = new SubClassB(7); + private final SubClassC subClassCFinalField = new SubClassC(8); + } + + private static final class Fields { + + private Number numberField = new Integer(1); + private SuperClass superClassField = new SubClassA(2); + private FinalSubClass finalSubClassField = new FinalSubClass(3); + private SingleImplementorInterface singleImplementorField = new SubClassA(4); + private MultipleImplementorsInterface multipleImplementorsField = new SubClassC(5); + private SubClassA subClassAField = new SubClassA(6); + private SubClassB subClassBField = new SubClassB(7); + private SubClassC subClassCField = new SubClassC(8); + } } diff -r 67fa9b3e10ed -r cd63140aaad7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Wed Jun 19 15:46:28 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Wed Jun 19 16:14:12 2013 +0200 @@ -26,7 +26,6 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; @@ -102,8 +101,9 @@ if (constantOffset != 0) { int intDisplacement = (int) (constantOffset + displacement()); if (constantOffset == intDisplacement) { - Graph graph = this.graph(); - return graph.add(new UnsafeStoreNode(this.stamp(), object(), intDisplacement, graph.unique(ConstantNode.forInt(0, graph)), value(), accessKind())); + UnsafeStoreNode unsafeStoreNode = graph().add(new UnsafeStoreNode(stamp(), object(), intDisplacement, ConstantNode.forInt(0, graph()), value(), accessKind())); + unsafeStoreNode.setStateAfter(stateAfter()); + return unsafeStoreNode; } } else if (object().stamp() instanceof ObjectStamp) { // TODO (gd) remove that once // UnsafeAccess only have an @@ -113,7 +113,9 @@ ResolvedJavaType receiverType = receiverStamp.type(); ResolvedJavaField field = receiverType.findInstanceFieldWithOffset(displacement()); if (field != null) { - return this.graph().add(new StoreFieldNode(object(), field, value())); + StoreFieldNode storeFieldNode = graph().add(new StoreFieldNode(object(), field, value())); + storeFieldNode.setStateAfter(stateAfter()); + return storeFieldNode; } } }