annotate graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java @ 12548:e1f40574c309

Unsafe{Load,Store}Node: users must provide an LocationIdentity explicitly. Provide more specific LocationIdentity in UnsafeArraySnippets (instead of ANY_LOCATION)
author Bernhard Urban <bernhard.urban@jku.at>
date Wed, 23 Oct 2013 22:06:27 +0200
parents 1a4dc163cd0a
children 4995bb251e3a
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 /*
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
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
11219
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
25 import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*;
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
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.*;
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
28 import java.lang.reflect.*;
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
29
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
30 import org.junit.*;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
31
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
32 import com.oracle.graal.api.code.*;
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.*;
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
34 import com.oracle.graal.api.runtime.*;
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
35 import com.oracle.graal.compiler.test.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
36 import com.oracle.graal.debug.*;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
37 import com.oracle.graal.hotspot.meta.*;
11779
d55fb90c1f12 Move barriers in hotspot specific package
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11661
diff changeset
38 import com.oracle.graal.hotspot.nodes.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
39 import com.oracle.graal.hotspot.phases.*;
11779
d55fb90c1f12 Move barriers in hotspot specific package
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11661
diff changeset
40 import com.oracle.graal.nodes.HeapAccess.BarrierType;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
41 import com.oracle.graal.nodes.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
42 import com.oracle.graal.nodes.extended.*;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
43 import com.oracle.graal.phases.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
44 import com.oracle.graal.phases.common.*;
9267
950a385e059b Make LoweringPhase reentrant.
Roland Schatz <roland.schatz@oracle.com>
parents: 9266
diff changeset
45 import com.oracle.graal.phases.tiers.*;
12488
1a4dc163cd0a abstracted HotSpotGraalRuntime as a RuntimeProvider which removes the recent selector addition to the Graal capabilities API and also makes Truffle independent of the graal.hotspot project (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents: 12371
diff changeset
46 import com.oracle.graal.runtime.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
47
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
48 /**
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
49 * 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
50 * 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
51 * 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
52 * 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
53 * 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
54 * 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
55 * 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
56 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
57 public class WriteBarrierAdditionTest extends GraalCompilerTest {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
58
12049
3cd7b1a27645 rename: metaAccessProvider -> metaAccess
Doug Simon <doug.simon@oracle.com>
parents: 12045
diff changeset
59 private final MetaAccessProvider metaAccess;
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
60
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
61 public WriteBarrierAdditionTest() {
12488
1a4dc163cd0a abstracted HotSpotGraalRuntime as a RuntimeProvider which removes the recent selector addition to the Graal capabilities API and also makes Truffle independent of the graal.hotspot project (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents: 12371
diff changeset
62 this.metaAccess = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getProviders().getMetaAccess();
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
63 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
64
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
65 public static class Container {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
66
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
67 public Container a;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
68 public Container b;
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
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
71 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
72 * 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
73 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
74 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
75 public void test1() throws Exception {
12370
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
76 int expectedBarriers = 0;
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
77 if (useG1GC()) {
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
78 expectedBarriers = (useDeferredInitBarriers() ? 0 : 4);
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
79 } else {
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
80 expectedBarriers = (useDeferredInitBarriers() ? 0 : 2);
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
81 }
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
82 test("test1Snippet", expectedBarriers);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
83 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
84
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
85 public static void test1Snippet() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
86 Container main = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
87 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
88 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
89 main.a = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
90 main.b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
91 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
92
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
93 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
94 * 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
95 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
96 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
97 public void test2() throws Exception {
12370
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
98 int expectedBarriers = 0;
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
99 if (useG1GC()) {
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
100 expectedBarriers = (useDeferredInitBarriers() ? 0 : 8);
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
101 } else {
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
102 expectedBarriers = (useDeferredInitBarriers() ? 0 : 4);
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
103 }
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
104 test("test2Snippet", expectedBarriers);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
105 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
106
9248
e49ea51a3395 Small changes to WriteBarrierAddition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 9240
diff changeset
107 public static void test2Snippet(boolean test) {
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
108 Container main = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
109 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
110 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
111 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
112 if (test) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
113 main.a = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
114 main.b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
115 } else {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
116 main.a = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
117 main.b = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
118 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
119 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
120 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
121
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
122 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
123 * 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
124 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
125 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
126 public void test3() throws Exception {
10798
7d3e74190a09 Code refactoring and cleanup
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10626
diff changeset
127 test("test3Snippet", useG1GC() ? 8 : 4);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
128 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
129
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
130 public static void test3Snippet() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
131 Container[] main = new Container[10];
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
132 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
133 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
134 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
135 main[i].a = main[i].b = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
136 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
137
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
138 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
139 main[i].a = main[i].b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
140 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
141 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
142
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
143 /**
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
144 * 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
145 * 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
146 * 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
147 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
148 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
149 public void test4() throws Exception {
12370
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
150 int expectedBarriers = 0;
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
151 if (useG1GC()) {
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
152 expectedBarriers = (useDeferredInitBarriers() ? 1 : 5);
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
153 } else {
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
154 expectedBarriers = (useDeferredInitBarriers() ? 0 : 2);
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
155 }
1e4d1c150ed5 Augment unit tests to account for deferred init barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11779
diff changeset
156 test("test4Snippet", expectedBarriers);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
157 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
158
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
159 public static Object test4Snippet() {
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
160 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
161 return weakRef.get();
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
162 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
163
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
164 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
165 static Container con = new Container();
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
166
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
167 /**
11219
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
168 * 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
169 * 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
170 * the pre barrier.
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
171 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
172 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
173 public void test5() throws Exception {
11435
016da8e6fbef updated check in WriteBarrierAdditionTest to account for extra inlining
Doug Simon <doug.simon@oracle.com>
parents: 11219
diff changeset
174 test("test5Snippet", useG1GC() ? 1 : 0);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
175 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
176
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
177 public static Object test5Snippet() throws Exception {
12548
e1f40574c309 Unsafe{Load,Store}Node: users must provide an LocationIdentity explicitly. Provide more specific LocationIdentity in UnsafeArraySnippets (instead of ANY_LOCATION)
Bernhard Urban <bernhard.urban@jku.at>
parents: 12488
diff changeset
178 return UnsafeLoadNode.load(wr, useCompressedOops() ? 12 : 16, Kind.Object, LocationIdentity.ANY_LOCATION);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
179 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
180
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
181 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
182 * 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
183 * 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
184 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
185 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
186 public void test6() throws Exception {
10823
2e852e96f977 Method renaming
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10801
diff changeset
187 test2("testUnsafeLoad", 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
188 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
189
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
190 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
191 * 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
192 * 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
193 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
194 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
195 public void test7() throws Exception {
10823
2e852e96f977 Method renaming
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10801
diff changeset
196 test2("testUnsafeLoad", con, new Long(referentOffset()), null);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
197 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
198
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
199 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
200 * 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
201 * 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
202 * not be executed.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
203 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
204 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
205 public void test8() throws Exception {
10823
2e852e96f977 Method renaming
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10801
diff changeset
206 test2("testUnsafeLoad", wr, new Long(32), null);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
207 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
208
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
209 /**
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
210 * 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
211 * 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
212 * must be executed.
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
213 */
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
214 @Test
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
215 public void test10() throws Exception {
11455
dafee8e3eecd Augment WriteBarrier Addition Test (unsafe load) to account for compressed oops
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11435
diff changeset
216 test2("testUnsafeLoad", wr, new Long(useCompressedOops() ? 6 : 8), new Integer(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
217 }
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
218
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
219 /**
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
220 * 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
221 * 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
222 * 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
223 */
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
224 @Test
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
225 public void test9() throws Exception {
10823
2e852e96f977 Method renaming
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10801
diff changeset
226 test2("testUnsafeLoad", wr, new Long(16), new Integer(16));
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
227 }
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
228
10943
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
229 static Object[] src = new Object[1];
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
230 static Object[] dst = new Object[1];
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
231
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
232 static {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
233 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
234 src[i] = new Object();
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
235 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
236 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
237 dst[i] = new Object();
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
238 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
239 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
240
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
241 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
242 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
243 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
244
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
245 @Test
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
246 public void test11() throws Exception {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
247 test2("testArrayCopy", src, dst, dst.length);
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
248 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
249
10823
2e852e96f977 Method renaming
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10801
diff changeset
250 public static Object testUnsafeLoad(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
251 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
252 final long displacement = (b == null ? 0 : ((Long) b).longValue());
12548
e1f40574c309 Unsafe{Load,Store}Node: users must provide an LocationIdentity explicitly. Provide more specific LocationIdentity in UnsafeArraySnippets (instead of ANY_LOCATION)
Bernhard Urban <bernhard.urban@jku.at>
parents: 12488
diff changeset
253 return UnsafeLoadNode.load(a, offset + displacement, Kind.Object, LocationIdentity.ANY_LOCATION);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
254 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
255
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
256 private HotSpotInstalledCode getInstalledCode(String name) throws Exception {
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
257 final Method method = WriteBarrierAdditionTest.class.getMethod(name, Object.class, Object.class, Object.class);
12049
3cd7b1a27645 rename: metaAccessProvider -> metaAccess
Doug Simon <doug.simon@oracle.com>
parents: 12045
diff changeset
258 final HotSpotResolvedJavaMethod javaMethod = (HotSpotResolvedJavaMethod) metaAccess.lookupJavaMethod(method);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
259 final HotSpotInstalledCode installedBenchmarkCode = (HotSpotInstalledCode) getCode(javaMethod, parse(method));
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
260 return installedBenchmarkCode;
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
261 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
262
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
263 private void test(final String snippet, final int expectedBarriers) throws Exception, SecurityException {
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
264 Debug.scope("WriteBarrierAditionTest", new DebugDumpScope(snippet), new Runnable() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
265
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
266 public void run() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
267 StructuredGraph graph = parse(snippet);
12054
bba234a1670e grouped provider values/parameters into a Providers object (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 12052
diff changeset
268 HighTierContext highContext = new HighTierContext(getProviders(), new Assumptions(false), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL);
bba234a1670e grouped provider values/parameters into a Providers object (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 12052
diff changeset
269 MidTierContext midContext = new MidTierContext(getProviders(), new Assumptions(false), getCodeCache().getTarget(), OptimisticOptimizations.ALL);
11567
c69df2e602f4 Use CanonicalizerPhase.applyIncremental in InliningPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 11566
diff changeset
270 new InliningPhase(new InliningPhase.InlineEverythingPolicy(), new CanonicalizerPhase(true)).apply(graph, highContext);
11584
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11567 11579
diff changeset
271 new LoweringPhase(new CanonicalizerPhase(true)).apply(graph, highContext);
11219
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
272 new GuardLoweringPhase().apply(graph, midContext);
11584
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11567 11579
diff changeset
273 new LoweringPhase(new CanonicalizerPhase(true)).apply(graph, midContext);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
274 new WriteBarrierAdditionPhase().apply(graph);
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
275 Debug.dump(graph, "After Write Barrier Addition");
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
276
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
277 int barriers = 0;
10798
7d3e74190a09 Code refactoring and cleanup
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10626
diff changeset
278 if (useG1GC()) {
11920
b7ce25d81ef3 fixed WriteBarrier tests
Doug Simon <doug.simon@oracle.com>
parents: 11779
diff changeset
279 barriers = graph.getNodes().filter(G1ReferentFieldReadBarrier.class).count() + graph.getNodes().filter(G1PreWriteBarrier.class).count() +
b7ce25d81ef3 fixed WriteBarrier tests
Doug Simon <doug.simon@oracle.com>
parents: 11779
diff changeset
280 graph.getNodes().filter(G1PostWriteBarrier.class).count();
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
281 } else {
11920
b7ce25d81ef3 fixed WriteBarrier tests
Doug Simon <doug.simon@oracle.com>
parents: 11779
diff changeset
282 barriers = graph.getNodes().filter(SerialWriteBarrier.class).count();
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
283 }
11435
016da8e6fbef updated check in WriteBarrierAdditionTest to account for extra inlining
Doug Simon <doug.simon@oracle.com>
parents: 11219
diff changeset
284 Assert.assertEquals(expectedBarriers, barriers);
11661
f8a87f3fab5a removed the IterableNodeType marker interface from (Read|Write|ArrayRangeWrite|LoweredCompareAndSwap)Node (GRAAL-471)
Doug Simon <doug.simon@oracle.com>
parents: 11584
diff changeset
285 for (WriteNode write : graph.getNodes().filter(WriteNode.class)) {
10798
7d3e74190a09 Code refactoring and cleanup
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10626
diff changeset
286 if (useG1GC()) {
10828
b05e1ff3aac0 Rename WriteBarrierType to BarrierType
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10823
diff changeset
287 if (write.getBarrierType() != BarrierType.NONE) {
11435
016da8e6fbef updated check in WriteBarrierAdditionTest to account for extra inlining
Doug Simon <doug.simon@oracle.com>
parents: 11219
diff changeset
288 Assert.assertEquals(1, write.successors().count());
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
289 Assert.assertTrue(write.next() instanceof G1PostWriteBarrier);
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
290 Assert.assertTrue(write.predecessor() instanceof G1PreWriteBarrier);
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
291 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
292 } else {
10828
b05e1ff3aac0 Rename WriteBarrierType to BarrierType
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10823
diff changeset
293 if (write.getBarrierType() != BarrierType.NONE) {
11435
016da8e6fbef updated check in WriteBarrierAdditionTest to account for extra inlining
Doug Simon <doug.simon@oracle.com>
parents: 11219
diff changeset
294 Assert.assertEquals(1, write.successors().count());
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
295 Assert.assertTrue(write.next() instanceof SerialWriteBarrier);
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
296 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
297 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
298 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
299
11661
f8a87f3fab5a removed the IterableNodeType marker interface from (Read|Write|ArrayRangeWrite|LoweredCompareAndSwap)Node (GRAAL-471)
Doug Simon <doug.simon@oracle.com>
parents: 11584
diff changeset
300 for (ReadNode read : graph.getNodes().filter(ReadNode.class)) {
10828
b05e1ff3aac0 Rename WriteBarrierType to BarrierType
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10823
diff changeset
301 if (read.getBarrierType() != BarrierType.NONE) {
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
302 if (read.location() instanceof ConstantLocationNode) {
11435
016da8e6fbef updated check in WriteBarrierAdditionTest to account for extra inlining
Doug Simon <doug.simon@oracle.com>
parents: 11219
diff changeset
303 Assert.assertEquals(referentOffset(), ((ConstantLocationNode) (read.location())).getDisplacement());
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
304 }
10798
7d3e74190a09 Code refactoring and cleanup
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10626
diff changeset
305 Assert.assertTrue(useG1GC());
11435
016da8e6fbef updated check in WriteBarrierAdditionTest to account for extra inlining
Doug Simon <doug.simon@oracle.com>
parents: 11219
diff changeset
306 Assert.assertEquals(BarrierType.PRECISE, read.getBarrierType());
10829
761002c55728 Add new node for referent field read barrier (G1 GC)
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10828
diff changeset
307 Assert.assertTrue(read.next() instanceof G1ReferentFieldReadBarrier);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
308 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
309 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
310 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
311 });
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
312 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
313
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
314 private void test2(final String snippet, Object a, Object b, Object c) throws Exception {
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
315 HotSpotInstalledCode code = getInstalledCode(snippet);
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
316 code.execute(a, b, c);
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
317 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
318 }