annotate graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java @ 19250:8ab925a6f724

made Assumptions be part of a StructuredGraph
author Doug Simon <doug.simon@oracle.com>
date Wed, 11 Feb 2015 10:13:08 +0100
parents cdb9c605051a
children a0a760b0fb5f
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
19250
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18531
diff changeset
25 import static com.oracle.graal.api.code.Assumptions.*;
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18531
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
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
31 import com.oracle.graal.api.meta.*;
15962
7c7cfc44cc61 fix WriteBarrierAdditionTest.test5
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15673
diff changeset
32 import com.oracle.graal.compiler.common.*;
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
33 import com.oracle.graal.compiler.test.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
34 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
35 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
36 import com.oracle.graal.hotspot.*;
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.*;
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
40 import com.oracle.graal.hotspot.replacements.*;
11779
d55fb90c1f12 Move barriers in hotspot specific package
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 11661
diff changeset
41 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
42 import com.oracle.graal.nodes.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
43 import com.oracle.graal.nodes.extended.*;
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
44 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
45 import com.oracle.graal.phases.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
46 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
47 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
48 import com.oracle.graal.phases.common.inlining.policy.*;
9267
950a385e059b Make LoweringPhase reentrant.
Roland Schatz <roland.schatz@oracle.com>
parents: 9266
diff changeset
49 import com.oracle.graal.phases.tiers.*;
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
50 import com.oracle.graal.replacements.*;
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
51
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
52 /**
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
53 * 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
54 * 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
55 * 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
56 * 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
57 * 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
58 * 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
59 * 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
60 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
61 public class WriteBarrierAdditionTest extends GraalCompilerTest {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
62
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
63 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
64 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
65
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
66 public static class Container {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
67
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
68 public Container a;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
69 public Container b;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
70 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
71
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
72 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
73 * 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
74 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
75 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
76 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
77 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
78 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
79
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
80 public static void test1Snippet() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
81 Container main = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
82 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
83 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
84 main.a = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
85 main.b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
86 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
87
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
88 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
89 * 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
90 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
91 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
92 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
93 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
94 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
95
9248
e49ea51a3395 Small changes to WriteBarrierAddition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 9240
diff changeset
96 public static void test2Snippet(boolean test) {
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
97 Container main = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
98 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
99 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
100 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
101 if (test) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
102 main.a = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
103 main.b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
104 } else {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
105 main.a = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
106 main.b = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
107 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
108 }
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
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
111 /**
10502
0ef79b98d842 Fix checkstyle errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10498
diff changeset
112 * 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
113 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
114 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
115 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
116 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
117 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
118
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
119 public static void test3Snippet() {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
120 Container[] main = new Container[10];
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
121 Container temp1 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
122 Container temp2 = new Container();
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
123 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
124 main[i].a = main[i].b = temp1;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
125 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
126
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
127 for (int i = 0; i < 10; i++) {
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
128 main[i].a = main[i].b = temp2;
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
129 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
130 }
9240
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 /**
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
133 * 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
134 * 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
135 * 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
136 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
137 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
138 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
139 testHelper("test4Snippet", config.useG1GC ? 5 : 2);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
140 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
141
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
142 public static Object test4Snippet() {
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
143 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
144 return weakRef.get();
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
145 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
146
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
147 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
148 static Container con = new Container();
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
149
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
150 /**
11219
539d9e8404d2 Augment write barrier addition tests for G1
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10943
diff changeset
151 * 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
152 * 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
153 * the pre barrier.
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
154 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
155 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
156 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
157 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
158 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
159
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
160 public static Object test5Snippet() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
161 return UnsafeAccess.unsafe.getObject(wr, config.useCompressedOops ? 12L : 16L);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
162 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
163
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
164 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
165 * 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
166 * 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
167 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
168 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
169 public void test6() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
170 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
171 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
172
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
173 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
174 * 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
175 * 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
176 */
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
177 @Test
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
178 public void test7() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
179 test2("testUnsafeLoad", con, new Long(referentOffset), null);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
180 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
181
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
182 /**
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
183 * 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
184 * 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
185 * not be executed.
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
186 */
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
187 @Test
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
188 public void test8() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
189 test2("testUnsafeLoad", wr, new Long(config.useCompressedOops ? 20 : 32), null);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
190 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
191
10801
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
192 /**
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
193 * 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
194 * 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
195 * must be executed.
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
196 */
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
197 @Test
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
198 public void test10() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
199 test2("testUnsafeLoad", 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
200 }
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
201
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 * 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
204 * 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
205 * 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
206 */
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
207 @Test
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
208 public void test9() throws Exception {
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
209 test2("testUnsafeLoad", 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
210 }
4bfbd4be6e7a Replace custom graph building with snippet for unsafe load lowering
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10798
diff changeset
211
10943
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
212 static Object[] src = new Object[1];
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
213 static Object[] dst = new Object[1];
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
214
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
215 static {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
216 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
217 src[i] = new Object();
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
218 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
219 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
220 dst[i] = new Object();
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
221 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
222 }
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 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
225 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
226 }
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
227
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
228 @Test
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
229 public void test11() throws Exception {
ed315765a43a Add more unittests for ArrayCopy write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10933
diff changeset
230 test2("testArrayCopy", src, dst, dst.length);
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
10823
2e852e96f977 Method renaming
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10801
diff changeset
233 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
234 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
235 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
236 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
237 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
238
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
239 private HotSpotInstalledCode getInstalledCode(String name) throws Exception {
18120
86ec7f6f71b3 refactored GraalCompilerTest API to be in terms of ResolvedJavaMethod instead of Method
Doug Simon <doug.simon@oracle.com>
parents: 16714
diff changeset
240 final ResolvedJavaMethod javaMethod = getResolvedJavaMethod(WriteBarrierAdditionTest.class, name, Object.class, Object.class, Object.class);
18127
7cefdad149ad enable a GraalCompilerTest to override how a method is parsed to produce a graph as well as being able to interpose on the method that is parsed/compiled
Doug Simon <doug.simon@oracle.com>
parents: 18120
diff changeset
241 final HotSpotInstalledCode installedBenchmarkCode = (HotSpotInstalledCode) getCode(javaMethod);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
242 return installedBenchmarkCode;
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
243 }
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
244
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
245 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
246 ResolvedJavaMethod snippet = getResolvedJavaMethod(snippetName);
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
247 try (Scope s = Debug.scope("WriteBarrierAdditionTest", snippet)) {
19250
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18531
diff changeset
248 StructuredGraph graph = parseEager(snippet, DONT_ALLOW_OPTIMISTIC_ASSUMPTIONS);
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18531
diff changeset
249 HighTierContext highContext = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18531
diff changeset
250 MidTierContext midContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
251 new NodeIntrinsificationPhase(getProviders(), getSnippetReflection()).apply(graph);
15673
9205a047fc86 [inlining] moved InlineEverythingPolicy to inlining.policy
Miguel Garcia <miguel.m.garcia@oracle.com>
parents: 15470
diff changeset
252 new InliningPhase(new InlineEverythingPolicy(), new CanonicalizerPhase(true)).apply(graph, highContext);
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
253 new LoweringPhase(new CanonicalizerPhase(true), 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
254 new GuardLoweringPhase().apply(graph, midContext);
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
255 new LoweringPhase(new CanonicalizerPhase(true), 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
256 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
257 Debug.dump(graph, "After Write Barrier Addition");
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
258
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
259 int barriers = 0;
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
260 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
261 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
262 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
263 } 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
264 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
265 }
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 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
267 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
268 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
269 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
270 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
271 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
272 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
273 }
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
274 } 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
275 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
276 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
277 Assert.assertTrue(write.next() instanceof SerialWriteBarrier);
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
278 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
279 }
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
280 }
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
281
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
282 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
283 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
284 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
285 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
286 }
18531
cdb9c605051a removed some static accesses to HotSpotGraalRuntime from some tests
Doug Simon <doug.simon@oracle.com>
parents: 18127
diff changeset
287 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
288 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
289 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
290 }
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 }
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 } 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
293 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
294 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
295 }
10498
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 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
298 HotSpotInstalledCode code = getInstalledCode(snippet);
14991
64dcb92ee75a Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13671
diff changeset
299 code.executeVarargs(a, b, c);
10498
75fb91c2ba1f Augment Write Barrier Addition Tests for G1 barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10440
diff changeset
300 }
9240
f453894e72ea Add WriteBarrier addition test
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff changeset
301 }