annotate test/compiler/6843752/Test.java @ 20304:a22acf6d7598

8048112: G1 Full GC needs to support the case when the very first region is not available Summary: Refactor preparation for compaction during Full GC so that it lazily initializes the first compaction point. This also avoids problems later when the first region may not be committed. Also reviewed by K. Barrett. Reviewed-by: brutisso
author tschatzl
date Mon, 21 Jul 2014 10:00:31 +0200
parents c18cbe5936b8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
788
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 788
diff changeset
2 * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
788
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
4 *
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
7 * published by the Free Software Foundation.
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
8 *
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
13 * accompanied this code).
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
14 *
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 788
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 788
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 788
diff changeset
21 * questions.
788
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
22 */
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
23
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
24 /*
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
25 * @test
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
26 * @bug 6843752
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
27 * @summary missing code for an anti-dependent Phi in GCM
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
28 * @run main/othervm -Xbatch Test
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
29 */
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
30
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
31 public class Test {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
32
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
33 Item list;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
34
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
35 static class Item {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
36 public Item next;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
37 public Item prev;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
38 public boolean remove;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
39
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
40 Item(boolean r) { remove = r; }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
41 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
42
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
43 private void linkIn(Item item) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
44 Item head = list;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
45 if (head == null) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
46 item.next = item;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
47 item.prev = item;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
48 list = item;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
49 } else {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
50 item.next = head;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
51 item.prev = head.prev;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
52 head.prev.next = item;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
53 head.prev = item;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
54 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
55 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
56
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
57 private void linkOut(Item item) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
58 Item head = list;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
59 if (item.next == item) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
60 list = null;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
61 } else {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
62 item.prev.next = item.next;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
63 item.next.prev = item.prev;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
64 if (head == item) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
65 list = item.next;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
66 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
67 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
68 item.next = null;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
69 item.prev = null; // this is the null pointer we are seeing
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
70 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
71
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
72 private void removeItems(int numItems) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
73 Item item = list;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
74 if (item == null) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
75 return;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
76 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
77 Item last = item.prev;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
78 boolean done = false;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
79 while (!done && numItems > 1) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
80 // the original code "done = (item == last);" triggered an infinite loop
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
81 // and was changed slightly in order to produce an exception instead.
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
82 done = (item.next == last.next);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
83 item = item.next;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
84 if (item.prev.remove) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
85 linkOut(item.prev);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
86 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
87 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
88 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
89
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
90 public void perform(int numItems) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
91 for (int i = 0; i < numItems; i++) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
92 linkIn(new Item(i == 0));
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
93 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
94 removeItems(numItems);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
95 list = null;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
96 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
97
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
98 static public void main(String[] args) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
99 int caseCnt = 0;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
100 Test bj = new Test();
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
101 try {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
102 for (; caseCnt < 500000;) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
103 int numItems = (++caseCnt % 2);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
104 if ((caseCnt % 64) == 0) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
105 numItems = 5;
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
106 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
107 bj.perform(numItems);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
108 if ((caseCnt % 100000) == 0) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
109 System.out.println("successfully performed " + caseCnt + " cases");
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
110 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
111 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
112 } catch (Exception e) {
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
113 System.out.println("ERROR: crashed during case " + caseCnt);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
114 e.printStackTrace(System.out);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
115 System.exit(97);
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
116 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
117 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
118 }
1851e1fb420e 6843752: missing code for an anti-dependent Phi in GCM
kvn
parents:
diff changeset
119