Mercurial > hg > graal-jvmci-8
comparison test/compiler/gcbarriers/G1CrashTest.java @ 12159:b17d8f6d9ed7
8023472: C2 optimization breaks with G1
Summary: set control edge for previous value load in G1 pre-barrier
Reviewed-by: twisti
author | kvn |
---|---|
date | Fri, 23 Aug 2013 18:04:35 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
12158:766fac3395d6 | 12159:b17d8f6d9ed7 |
---|---|
1 /* | |
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 * | |
23 */ | |
24 | |
25 /** | |
26 * @test | |
27 * @bug 8023472 | |
28 * @summary C2 optimization breaks with G1 | |
29 * | |
30 * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Dcount=100000 G1CrashTest | |
31 * | |
32 * @author pbiswal@palantir.com | |
33 */ | |
34 | |
35 public class G1CrashTest { | |
36 static Object[] set = new Object[11]; | |
37 | |
38 public static void main(String[] args) throws InterruptedException { | |
39 for (int j = 0; j < Integer.getInteger("count"); j++) { | |
40 Object key = new Object(); | |
41 insertKey(key); | |
42 if (j > set.length / 2) { | |
43 Object[] oldKeys = set; | |
44 set = new Object[2 * set.length - 1]; | |
45 for (Object o : oldKeys) { | |
46 if (o != null) | |
47 insertKey(o); | |
48 } | |
49 } | |
50 } | |
51 } | |
52 | |
53 static void insertKey(Object key) { | |
54 int hash = key.hashCode() & 0x7fffffff; | |
55 int index = hash % set.length; | |
56 Object cur = set[index]; | |
57 if (cur == null) | |
58 set[index] = key; | |
59 else | |
60 insertKeyRehash(key, index, hash, cur); | |
61 } | |
62 | |
63 static void insertKeyRehash(Object key, int index, int hash, Object cur) { | |
64 int loopIndex = index; | |
65 int firstRemoved = -1; | |
66 do { | |
67 if (cur == "dead") | |
68 firstRemoved = 1; | |
69 index--; | |
70 if (index < 0) | |
71 index += set.length; | |
72 cur = set[index]; | |
73 if (cur == null) { | |
74 if (firstRemoved != -1) | |
75 set[firstRemoved] = "dead"; | |
76 else | |
77 set[index] = key; | |
78 return; | |
79 } | |
80 } while (index != loopIndex); | |
81 if (firstRemoved != -1) | |
82 set[firstRemoved] = null; | |
83 } | |
84 } |