# HG changeset patch # User Christian Haeubl # Date 1371637263 -7200 # Node ID baec10fbe959e854c2830f2324e978b43e90ba20 # Parent e0fb8a2136502c8ee67dc8c61e9a0f8f9abe5048 Added a more inlining test cases. diff -r e0fb8a213650 -r baec10fbe959 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 Tue Jun 18 14:23:29 2013 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Wed Jun 19 12:21:03 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); + } }