20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package org.graalvm.compiler.hotspot.test;
24
25 import java.util.List;
26
27 import org.graalvm.compiler.debug.DebugCloseable;
28 import org.graalvm.compiler.debug.DebugContext;
29 import org.graalvm.compiler.debug.DebugContext.Scope;
30 import org.graalvm.compiler.debug.DebugDumpScope;
31 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
32 import org.graalvm.compiler.hotspot.nodes.G1ArrayRangePostWriteBarrier;
33 import org.graalvm.compiler.hotspot.nodes.G1ArrayRangePreWriteBarrier;
34 import org.graalvm.compiler.hotspot.nodes.G1PostWriteBarrier;
35 import org.graalvm.compiler.hotspot.nodes.G1PreWriteBarrier;
36 import org.graalvm.compiler.hotspot.nodes.SerialArrayRangeWriteBarrier;
37 import org.graalvm.compiler.hotspot.nodes.SerialWriteBarrier;
38 import org.graalvm.compiler.hotspot.phases.WriteBarrierAdditionPhase;
39 import org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase;
40 import org.graalvm.compiler.hotspot.replacements.arraycopy.UnsafeArrayCopyNode;
41 import org.graalvm.compiler.nodes.AbstractBeginNode;
42 import org.graalvm.compiler.nodes.AbstractMergeNode;
43 import org.graalvm.compiler.nodes.FieldLocationIdentity;
44 import org.graalvm.compiler.nodes.FixedNode;
45 import org.graalvm.compiler.nodes.FixedWithNextNode;
46 import org.graalvm.compiler.nodes.LoopBeginNode;
47 import org.graalvm.compiler.nodes.LoopExitNode;
48 import org.graalvm.compiler.nodes.StructuredGraph;
49 import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
50 import org.graalvm.compiler.nodes.memory.WriteNode;
51 import org.graalvm.compiler.nodes.spi.LoweringTool;
52 import org.graalvm.compiler.phases.OptimisticOptimizations;
53 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
54 import org.graalvm.compiler.phases.common.GuardLoweringPhase;
55 import org.graalvm.compiler.phases.common.LoopSafepointInsertionPhase;
56 import org.graalvm.compiler.phases.common.LoweringPhase;
57 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
58 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator;
59 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator.NodeIteratorClosure;
60 import org.graalvm.compiler.phases.tiers.HighTierContext;
610 test("test12Snippet", 8, new int[]{5});
611 }
612
613 @Test
614 public void test58() {
615 test("test12Snippet", 8, new int[]{6});
616 }
617
618 @Test(expected = AssertionError.class)
619 public void test59() {
620 test("test12Snippet", 8, new int[]{7});
621 }
622
623 @Test(expected = AssertionError.class)
624 public void test60() {
625 test("test12Snippet", 8, new int[]{8});
626 }
627
628 public static void test13Snippet(Object[] a, Object[] b) {
629 System.arraycopy(a, 0, b, 0, a.length);
630 }
631
632 @Test
633 public void test61() {
634 GraphPredicate checkForUnsafeArrayCopy = graph -> graph.getNodes().filter(UnsafeArrayCopyNode.class).count() > 0 ? 1 : 0;
635 testPredicate("test13Snippet", checkForUnsafeArrayCopy, new int[]{});
636 }
637
638 private interface GraphPredicate {
639 int apply(StructuredGraph graph);
640 }
641
642 private void test(final String snippet, final int expectedBarriers, final int... removedBarrierIndices) {
643 GraphPredicate noCheck = noArg -> expectedBarriers;
644 testPredicate(snippet, noCheck, removedBarrierIndices);
645 }
646
647 @SuppressWarnings("try")
648 private void testPredicate(final String snippet, final GraphPredicate expectedBarriers, final int... removedBarrierIndices) {
649 DebugContext debug = getDebugContext();
650 try (DebugCloseable d = debug.disableIntercept(); DebugContext.Scope s = debug.scope("WriteBarrierVerificationTest", new DebugDumpScope(snippet))) {
651 final StructuredGraph graph = parseEager(snippet, AllowAssumptions.YES, debug);
652 HighTierContext highTierContext = getDefaultHighTierContext();
653 new InliningPhase(new CanonicalizerPhase()).apply(graph, highTierContext);
654
655 MidTierContext midTierContext = new MidTierContext(getProviders(), getTargetProvider(), OptimisticOptimizations.ALL, graph.getProfilingInfo());
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package org.graalvm.compiler.hotspot.test;
24
25 import java.util.List;
26
27 import org.graalvm.compiler.debug.DebugCloseable;
28 import org.graalvm.compiler.debug.DebugContext;
29 import org.graalvm.compiler.debug.DebugContext.Scope;
30 import org.graalvm.compiler.debug.DebugDumpScope;
31 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
32 import org.graalvm.compiler.hotspot.nodes.G1ArrayRangePostWriteBarrier;
33 import org.graalvm.compiler.hotspot.nodes.G1ArrayRangePreWriteBarrier;
34 import org.graalvm.compiler.hotspot.nodes.G1PostWriteBarrier;
35 import org.graalvm.compiler.hotspot.nodes.G1PreWriteBarrier;
36 import org.graalvm.compiler.hotspot.nodes.SerialArrayRangeWriteBarrier;
37 import org.graalvm.compiler.hotspot.nodes.SerialWriteBarrier;
38 import org.graalvm.compiler.hotspot.phases.WriteBarrierAdditionPhase;
39 import org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase;
40 import org.graalvm.compiler.nodes.AbstractBeginNode;
41 import org.graalvm.compiler.nodes.AbstractMergeNode;
42 import org.graalvm.compiler.nodes.FieldLocationIdentity;
43 import org.graalvm.compiler.nodes.FixedNode;
44 import org.graalvm.compiler.nodes.FixedWithNextNode;
45 import org.graalvm.compiler.nodes.LoopBeginNode;
46 import org.graalvm.compiler.nodes.LoopExitNode;
47 import org.graalvm.compiler.nodes.StructuredGraph;
48 import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
49 import org.graalvm.compiler.nodes.memory.WriteNode;
50 import org.graalvm.compiler.nodes.spi.LoweringTool;
51 import org.graalvm.compiler.phases.OptimisticOptimizations;
52 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
53 import org.graalvm.compiler.phases.common.GuardLoweringPhase;
54 import org.graalvm.compiler.phases.common.LoopSafepointInsertionPhase;
55 import org.graalvm.compiler.phases.common.LoweringPhase;
56 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
57 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator;
58 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator.NodeIteratorClosure;
59 import org.graalvm.compiler.phases.tiers.HighTierContext;
609 test("test12Snippet", 8, new int[]{5});
610 }
611
612 @Test
613 public void test58() {
614 test("test12Snippet", 8, new int[]{6});
615 }
616
617 @Test(expected = AssertionError.class)
618 public void test59() {
619 test("test12Snippet", 8, new int[]{7});
620 }
621
622 @Test(expected = AssertionError.class)
623 public void test60() {
624 test("test12Snippet", 8, new int[]{8});
625 }
626
627 public static void test13Snippet(Object[] a, Object[] b) {
628 System.arraycopy(a, 0, b, 0, a.length);
629 }
630
631 private interface GraphPredicate {
632 int apply(StructuredGraph graph);
633 }
634
635 private void test(final String snippet, final int expectedBarriers, final int... removedBarrierIndices) {
636 GraphPredicate noCheck = noArg -> expectedBarriers;
637 testPredicate(snippet, noCheck, removedBarrierIndices);
638 }
639
640 @SuppressWarnings("try")
641 private void testPredicate(final String snippet, final GraphPredicate expectedBarriers, final int... removedBarrierIndices) {
642 DebugContext debug = getDebugContext();
643 try (DebugCloseable d = debug.disableIntercept(); DebugContext.Scope s = debug.scope("WriteBarrierVerificationTest", new DebugDumpScope(snippet))) {
644 final StructuredGraph graph = parseEager(snippet, AllowAssumptions.YES, debug);
645 HighTierContext highTierContext = getDefaultHighTierContext();
646 new InliningPhase(new CanonicalizerPhase()).apply(graph, highTierContext);
647
648 MidTierContext midTierContext = new MidTierContext(getProviders(), getTargetProvider(), OptimisticOptimizations.ALL, graph.getProfilingInfo());
|