31 import jdk.vm.ci.meta.ResolvedJavaMethod;
32 import org.graalvm.compiler.core.test.GraalCompilerTest;
33 import org.graalvm.compiler.debug.DebugContext;
34 import org.graalvm.compiler.debug.DebugDumpScope;
35 import org.graalvm.compiler.graph.Node;
36 import org.graalvm.compiler.nodes.DeoptimizeNode;
37 import org.graalvm.compiler.nodes.InvokeNode;
38 import org.graalvm.compiler.nodes.StructuredGraph;
39 import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
40 import org.graalvm.compiler.nodes.StructuredGraph.Builder;
41 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
42 import org.graalvm.compiler.nodes.java.TypeSwitchNode;
43 import org.graalvm.compiler.phases.OptimisticOptimizations;
44 import org.graalvm.compiler.phases.PhaseSuite;
45 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
46 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
47 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
48 import org.graalvm.compiler.phases.tiers.HighTierContext;
49 import org.graalvm.compiler.test.SubprocessUtil;
50 import org.junit.Assert;
51 import org.junit.Test;
52
53 import java.io.IOException;
54 import java.util.List;
55
56 public class PolymorphicInliningTest extends GraalCompilerTest {
57
58 @Test
59 public void testInSubprocess() throws InterruptedException, IOException {
60 String recursionPropName = getClass().getName() + ".recursion";
61 if (Boolean.getBoolean(recursionPropName)) {
62 testPolymorphicInlining();
63 testPolymorphicNotInlining();
64 testMegamorphicInlining();
65 testMegamorphicNotInlining();
66 } else {
67 List<String> vmArgs = withoutDebuggerArguments(getVMCommandLine());
68 NotInlinableSubClass.class.getCanonicalName();
69 vmArgs.add("-XX:CompileCommand=dontinline,org/graalvm/compiler/core/test/inlining/PolymorphicInliningTest$NotInlinableSubClass.publicOverriddenMethod");
70 vmArgs.add("-D" + recursionPropName + "=true");
71 SubprocessUtil.Subprocess proc = java(vmArgs, "com.oracle.mxtool.junit.MxJUnitWrapper", getClass().getName());
72 if (proc.exitCode != 0) {
73 Assert.fail(String.format("non-zero exit code %d for command:%n%s", proc.exitCode, proc));
74 }
75 }
76 }
|
31 import jdk.vm.ci.meta.ResolvedJavaMethod;
32 import org.graalvm.compiler.core.test.GraalCompilerTest;
33 import org.graalvm.compiler.debug.DebugContext;
34 import org.graalvm.compiler.debug.DebugDumpScope;
35 import org.graalvm.compiler.graph.Node;
36 import org.graalvm.compiler.nodes.DeoptimizeNode;
37 import org.graalvm.compiler.nodes.InvokeNode;
38 import org.graalvm.compiler.nodes.StructuredGraph;
39 import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
40 import org.graalvm.compiler.nodes.StructuredGraph.Builder;
41 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
42 import org.graalvm.compiler.nodes.java.TypeSwitchNode;
43 import org.graalvm.compiler.phases.OptimisticOptimizations;
44 import org.graalvm.compiler.phases.PhaseSuite;
45 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
46 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
47 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
48 import org.graalvm.compiler.phases.tiers.HighTierContext;
49 import org.graalvm.compiler.test.SubprocessUtil;
50 import org.junit.Assert;
51 import org.junit.Assume;
52 import org.junit.Before;
53 import org.junit.Test;
54
55 import java.io.IOException;
56 import java.util.List;
57
58 public class PolymorphicInliningTest extends GraalCompilerTest {
59
60 @Before
61 public void checkJavaAgent() {
62 Assume.assumeFalse("Java Agent found -> skipping", SubprocessUtil.isJavaAgentAttached());
63 }
64
65 @Test
66 public void testInSubprocess() throws InterruptedException, IOException {
67 String recursionPropName = getClass().getName() + ".recursion";
68 if (Boolean.getBoolean(recursionPropName)) {
69 testPolymorphicInlining();
70 testPolymorphicNotInlining();
71 testMegamorphicInlining();
72 testMegamorphicNotInlining();
73 } else {
74 List<String> vmArgs = withoutDebuggerArguments(getVMCommandLine());
75 NotInlinableSubClass.class.getCanonicalName();
76 vmArgs.add("-XX:CompileCommand=dontinline,org/graalvm/compiler/core/test/inlining/PolymorphicInliningTest$NotInlinableSubClass.publicOverriddenMethod");
77 vmArgs.add("-D" + recursionPropName + "=true");
78 SubprocessUtil.Subprocess proc = java(vmArgs, "com.oracle.mxtool.junit.MxJUnitWrapper", getClass().getName());
79 if (proc.exitCode != 0) {
80 Assert.fail(String.format("non-zero exit code %d for command:%n%s", proc.exitCode, proc));
81 }
82 }
83 }
|