annotate graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java @ 21543:93c50cefb9e8

moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
author Doug Simon <doug.simon@oracle.com>
date Mon, 25 May 2015 23:30:34 +0200
parents 5e868236654f
children 5324104ac4f3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
1 /*
21418
cba35d171cd1 Move memory related nodes to their own package.
Roland Schatz <roland.schatz@oracle.com>
parents: 21007
diff changeset
2 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
4 *
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
8 *
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
13 * accompanied this code).
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
14 *
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
18 *
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
21 * questions.
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
22 */
10440
7a0d4d95f84c moved write barrier tests to graal.hotspot.test and removed the graal.compiler.test -> graal.hotspot dependency
Doug Simon <doug.simon@oracle.com>
parents: 9916
diff changeset
23 package com.oracle.graal.hotspot.test;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
24
21541
5e868236654f moved UnsafeAccess to com.oracle.jvmci.common (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21526
diff changeset
25 import static com.oracle.jvmci.common.UnsafeAccess.*;
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
26
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
27 import java.lang.ref.*;
15962
7c7cfc44cc61 fix WriteBarrierAdditionTest.test5
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15673
diff changeset
28
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
29 import org.junit.*;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
30
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
31 import sun.misc.*;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
32
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
33 import com.oracle.graal.api.meta.*;
10440
7a0d4d95f84c moved write barrier tests to graal.hotspot.test and removed the graal.compiler.test -> graal.hotspot dependency
Doug Simon <doug.simon@oracle.com>
parents: 9916
diff changeset
34 import com.oracle.graal.compiler.test.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
35 import com.oracle.graal.debug.*;
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
36 import com.oracle.graal.debug.Debug.Scope;
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
37 import com.oracle.graal.hotspot.*;
21526
1da7aef31a08 created com.oracle.graal.hotspot.jvmci package and moved classes destined for future JVMCI module into it (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21418
diff changeset
38 import com.oracle.graal.hotspot.jvmci.*;
11779
d55fb90c1f12 Move barriers in hotspot specific package
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11661
diff changeset
39 import com.oracle.graal.hotspot.nodes.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
40 import com.oracle.graal.hotspot.phases.*;
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
41 import com.oracle.graal.hotspot.replacements.*;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
42 import com.oracle.graal.nodes.*;
19306
a0a760b0fb5f pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 19250
diff changeset
43 import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
44 import com.oracle.graal.nodes.extended.*;
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21541
diff changeset
45 import com.oracle.graal.nodes.memory.HeapAccess.BarrierType;
21418
cba35d171cd1 Move memory related nodes to their own package.
Roland Schatz <roland.schatz@oracle.com>
parents: 21007
diff changeset
46 import com.oracle.graal.nodes.memory.*;
13505
75a67ebd50e8 Introduce a LoweringStage so that lowerings can be conditional on one of the three times that lowering is performed by default
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13217
diff changeset
47 import com.oracle.graal.nodes.spi.*;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
48 import com.oracle.graal.phases.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
49 import com.oracle.graal.phases.common.*;
15470
c55f44b3c5e5 remove NodesToDoubles, refactoring of node probability and inlining relevance computation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15018
diff changeset
50 import com.oracle.graal.phases.common.inlining.*;
18120
86ec7f6f71b3 refactored GraalCompilerTest API to be in terms of ResolvedJavaMethod instead of Method
Doug Simon <doug.simon@oracle.com>
parents: 16714
diff changeset
51 import com.oracle.graal.phases.common.inlining.policy.*;
9267
950a385e059b Make LoweringPhase reentrant.
Roland Schatz <roland.schatz@oracle.com>
parents: 9266
diff changeset
52 import com.oracle.graal.phases.tiers.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
53
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
54 /**
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
55 * The following unit tests assert the presence of write barriers for both Serial and G1 GCs.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
56 * Normally, the tests check for compile time inserted barriers. However, there are the cases of
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
57 * unsafe loads of the java.lang.ref.Reference.referent field where runtime checks have to be
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
58 * performed also. For those cases, the unit tests check the presence of the compile-time inserted
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
59 * barriers. Concerning the runtime checks, the results of variable inputs (object types and
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
60 * offsets) passed as input parameters can be checked against printed output from the G1 write
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
61 * barrier snippets. The runtime checks have been validated offline.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
62 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
63 public class WriteBarrierAdditionTest extends GraalCompilerTest {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
64
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
65 private static final HotSpotVMConfig config = HotSpotGraalRuntime.runtime().getConfig();
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
66 private static final long referentOffset = HotSpotReplacementsUtil.referentOffset();
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
67
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
68 public static class Container {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
69
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
70 public Container a;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
71 public Container b;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
72 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
73
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
74 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
75 * Expected 2 barriers for the Serial GC and 4 for G1 (2 pre + 2 post).
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
76 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
77 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
78 public void test1() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
79 testHelper("test1Snippet", (config.useG1GC) ? 4 : 2);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
80 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
81
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
82 public static void test1Snippet() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
83 Container main = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
84 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
85 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
86 main.a = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
87 main.b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
88 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
89
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
90 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
91 * Expected 4 barriers for the Serial GC and 8 for G1 (4 pre + 4 post).
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
92 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
93 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
94 public void test2() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
95 testHelper("test2Snippet", config.useG1GC ? 8 : 4);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
96 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
97
9248
e49ea51a3395 Small changes to WriteBarrierAddition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 9240
diff changeset
98 public static void test2Snippet(boolean test) {
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
99 Container main = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
100 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
101 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
102 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
103 if (test) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
104 main.a = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
105 main.b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
106 } else {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
107 main.a = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
108 main.b = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
109 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
110 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
111 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
112
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
113 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
114 * Expected 4 barriers for the Serial GC and 8 for G1 (4 pre + 4 post).
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
115 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
116 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
117 public void test3() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
118 testHelper("test3Snippet", config.useG1GC ? 8 : 4);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
119 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
120
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
121 public static void test3Snippet() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
122 Container[] main = new Container[10];
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
123 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
124 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
125 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
126 main[i].a = main[i].b = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
127 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
128
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
129 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
130 main[i].a = main[i].b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
131 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
132 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
133
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
134 /**
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
135 * Expected 2 barriers for the Serial GC and 5 for G1 (3 pre + 2 post) The (2 or 4) barriers are
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
136 * emitted while initializing the fields of the WeakReference instance. The extra pre barrier of
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
137 * G1 concerns the read of the referent field.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
138 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
139 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
140 public void test4() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
141 testHelper("test4Snippet", config.useG1GC ? 5 : 2);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
142 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
143
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
144 public static Object test4Snippet() {
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
145 WeakReference<Object> weakRef = new WeakReference<>(new Object());
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
146 return weakRef.get();
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
147 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
148
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
149 static WeakReference<Object> wr = new WeakReference<>(new Object());
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
150 static Container con = new Container();
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
151
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
152 /**
11219
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
153 * Expected 4 barriers for the Serial GC and 9 for G1 (1 ref + 4 pre + 4 post). In this test, we
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
154 * load the correct offset of the WeakReference object so naturally we assert the presence of
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
155 * the pre barrier.
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
156 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
157 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
158 public void test5() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
159 testHelper("test5Snippet", config.useG1GC ? 1 : 0);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
160 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
161
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
162 public static Object test5Snippet() throws Exception {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
163 return unsafe.getObject(wr, config.useCompressedOops ? 12L : 16L);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
164 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
165
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
166 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
167 * The following test concerns the runtime checks of the unsafe loads. In this test, we unsafely
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
168 * load the java.lang.ref.Reference.referent field so the pre barier has to be executed.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
169 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
170 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
171 public void test6() throws Exception {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
172 test2("testUnsafeLoad", unsafe, wr, new Long(referentOffset), null);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
173 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
174
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
175 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
176 * The following test concerns the runtime checks of the unsafe loads. In this test, we unsafely
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
177 * load a matching offset of a wrong object so the pre barier must not be executed.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
178 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
179 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
180 public void test7() throws Exception {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
181 test2("testUnsafeLoad", unsafe, con, new Long(referentOffset), null);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
182 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
183
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
184 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
185 * The following test concerns the runtime checks of the unsafe loads. In this test, we unsafely
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
186 * load a non-matching offset field of the java.lang.ref.Reference object so the pre barier must
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
187 * not be executed.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
188 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
189 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
190 public void test8() throws Exception {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
191 test2("testUnsafeLoad", unsafe, wr, new Long(config.useCompressedOops ? 20 : 32), null);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
192 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
193
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
194 /**
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
195 * The following test concerns the runtime checks of the unsafe loads. In this test, we unsafely
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
196 * load a matching offset+disp field of the java.lang.ref.Reference object so the pre barier
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
197 * must be executed.
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
198 */
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
199 @Test
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
200 public void test10() throws Exception {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
201 test2("testUnsafeLoad", unsafe, wr, new Long(config.useCompressedOops ? 6 : 8), new Integer(config.useCompressedOops ? 6 : 8));
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
202 }
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
203
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
204 /**
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
205 * The following test concerns the runtime checks of the unsafe loads. In this test, we unsafely
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
206 * load a non-matching offset+disp field of the java.lang.ref.Reference object so the pre barier
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
207 * must not be executed.
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
208 */
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
209 @Test
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
210 public void test9() throws Exception {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
211 test2("testUnsafeLoad", unsafe, wr, new Long(config.useCompressedOops ? 10 : 16), new Integer(config.useCompressedOops ? 10 : 16));
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
212 }
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
213
10943
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
214 static Object[] src = new Object[1];
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
215 static Object[] dst = new Object[1];
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
216
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
217 static {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
218 for (int i = 0; i < src.length; i++) {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
219 src[i] = new Object();
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
220 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
221 for (int i = 0; i < dst.length; i++) {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
222 dst[i] = new Object();
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
223 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
224 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
225
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
226 public static void testArrayCopy(Object a, Object b, Object c) throws Exception {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
227 System.arraycopy(a, 0, b, 0, (int) c);
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
228 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
229
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
230 @Test
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
231 public void test11() throws Exception {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
232 test2("testArrayCopy", src, dst, dst.length);
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
233 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
234
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
235 public static Object testUnsafeLoad(Unsafe theUnsafe, Object a, Object b, Object c) throws Exception {
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
236 final int offset = (c == null ? 0 : ((Integer) c).intValue());
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
237 final long displacement = (b == null ? 0 : ((Long) b).longValue());
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
238 return theUnsafe.getObject(a, offset + displacement);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
239 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
240
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
241 private HotSpotInstalledCode getInstalledCode(String name, boolean withUnsafePrefix) throws Exception {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
242 final ResolvedJavaMethod javaMethod = withUnsafePrefix ? getResolvedJavaMethod(WriteBarrierAdditionTest.class, name, Unsafe.class, Object.class, Object.class, Object.class)
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
243 : getResolvedJavaMethod(WriteBarrierAdditionTest.class, name, Object.class, Object.class, Object.class);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
244 final HotSpotInstalledCode installedCode = (HotSpotInstalledCode) getCode(javaMethod);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
245 return installedCode;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
246 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
247
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
248 private void testHelper(final String snippetName, final int expectedBarriers) throws Exception, SecurityException {
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
249 ResolvedJavaMethod snippet = getResolvedJavaMethod(snippetName);
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
250 try (Scope s = Debug.scope("WriteBarrierAdditionTest", snippet)) {
19306
a0a760b0fb5f pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 19250
diff changeset
251 StructuredGraph graph = parseEager(snippet, AllowAssumptions.NO);
20068
cc3131ff7ce2 Remove GraphCache option.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19881
diff changeset
252 HighTierContext highContext = getDefaultHighTierContext();
19250
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18531
diff changeset
253 MidTierContext midContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
19709
2fd45bb25118 Initial version of new dominator-based conditional elimination phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19306
diff changeset
254 new InliningPhase(new InlineEverythingPolicy(), new CanonicalizerPhase()).apply(graph, highContext);
2fd45bb25118 Initial version of new dominator-based conditional elimination phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19306
diff changeset
255 new CanonicalizerPhase().apply(graph, highContext);
2fd45bb25118 Initial version of new dominator-based conditional elimination phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19306
diff changeset
256 new LoweringPhase(new CanonicalizerPhase(), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, highContext);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
257 new GuardLoweringPhase().apply(graph, midContext);
19709
2fd45bb25118 Initial version of new dominator-based conditional elimination phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19306
diff changeset
258 new LoweringPhase(new CanonicalizerPhase(), LoweringTool.StandardLoweringStage.MID_TIER).apply(graph, midContext);
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
259 new WriteBarrierAdditionPhase(config).apply(graph);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
260 Debug.dump(graph, "After Write Barrier Addition");
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
261
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
262 int barriers = 0;
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
263 if (config.useG1GC) {
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
264 barriers = graph.getNodes().filter(G1ReferentFieldReadBarrier.class).count() + graph.getNodes().filter(G1PreWriteBarrier.class).count() +
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
265 graph.getNodes().filter(G1PostWriteBarrier.class).count();
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
266 } else {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
267 barriers = graph.getNodes().filter(SerialWriteBarrier.class).count();
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
268 }
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
269 Assert.assertEquals(expectedBarriers, barriers);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
270 for (WriteNode write : graph.getNodes().filter(WriteNode.class)) {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
271 if (config.useG1GC) {
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
272 if (write.getBarrierType() != BarrierType.NONE) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
273 Assert.assertEquals(1, write.successors().count());
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
274 Assert.assertTrue(write.next() instanceof G1PostWriteBarrier);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
275 Assert.assertTrue(write.predecessor() instanceof G1PreWriteBarrier);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
276 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
277 } else {
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
278 if (write.getBarrierType() != BarrierType.NONE) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
279 Assert.assertEquals(1, write.successors().count());
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
280 Assert.assertTrue(write.next() instanceof SerialWriteBarrier);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
281 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
282 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
283 }
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
284
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
285 for (ReadNode read : graph.getNodes().filter(ReadNode.class)) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
286 if (read.getBarrierType() != BarrierType.NONE) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
287 if (read.location() instanceof ConstantLocationNode) {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
288 Assert.assertEquals(referentOffset, ((ConstantLocationNode) (read.location())).getDisplacement());
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
289 }
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
290 Assert.assertTrue(config.useG1GC);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
291 Assert.assertEquals(BarrierType.PRECISE, read.getBarrierType());
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
292 Assert.assertTrue(read.next() instanceof G1ReferentFieldReadBarrier);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
293 }
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
294 }
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
295 } catch (Throwable e) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
296 throw Debug.handle(e);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 12607
diff changeset
297 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
298 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
299
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
300 private void test2(final String snippet, Object... args) throws Exception {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
301 HotSpotInstalledCode code = getInstalledCode(snippet, args[0] instanceof Unsafe);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19709
diff changeset
302 code.executeVarargs(args);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
303 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
304 }