Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.
/ lanai Public archive

Commit 8a2f589

Browse files
committedFeb 23, 2021
8260637: Shenandoah: assert(_base == Tuple) failure during C2 compilation
Reviewed-by: chagedorn, kvn
1 parent 67762de commit 8a2f589

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed
 

‎src/hotspot/share/opto/loopnode.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -5301,7 +5301,7 @@ void PhaseIdealLoop::build_loop_late_post_work(Node *n, bool pinned) {
53015301
case Op_HasNegatives:
53025302
pinned = false;
53035303
}
5304-
if (n->is_CMove()) {
5304+
if (n->is_CMove() || n->is_ConstraintCast()) {
53055305
pinned = false;
53065306
}
53075307
if( pinned ) {

‎test/hotspot/jtreg/gc/shenandoah/compiler/LRBRightAfterMemBar.java

+32-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
/**
2525
* @test
26-
* @bug 8237007
26+
* @bug 8237007 8260637
2727
* @summary Shenandoah: assert(_base == Tuple) failure during C2 compilation
2828
* @requires vm.flavor == "server"
2929
* @requires vm.gc.Shenandoah
@@ -33,18 +33,19 @@
3333
*/
3434

3535
public class LRBRightAfterMemBar {
36-
private static Object field1;
36+
private static A field1;
3737
private static Object field2;
3838
static volatile int barrier;
3939

4040
public static void main(String[] args) {
4141
for (int i = 0; i < 20_000; i++) {
42-
test(true, true, new Object());
43-
test(false, false, new Object());
42+
test1(true, true, new Object());
43+
test1(false, false, new Object());
44+
test2(new Object(), 0, 10);
4445
}
4546
}
4647

47-
private static Object test(boolean flag, boolean flag2, Object o2) {
48+
private static Object test1(boolean flag, boolean flag2, Object o2) {
4849
for (int i = 0; i < 10; i++) {
4950
barrier = 0x42; // Membar
5051
if (o2 == null) { // hoisted out of loop
@@ -61,4 +62,30 @@ private static Object test(boolean flag, boolean flag2, Object o2) {
6162

6263
return null;
6364
}
65+
66+
private static int test2(Object o2, int start, int stop) {
67+
A a1 = null;
68+
A a2 = null;
69+
int v = 0;
70+
for (int i = start; i < stop; i++) {
71+
a2 = new A();
72+
a1 = new A();
73+
a1.a = a2;
74+
barrier = 0x42; // Membar
75+
if (o2 == null) { // hoisted out of loop
76+
}
77+
A a3 = a1.a;
78+
v = a3.f; // null check optimized out by EA but CastPP left in
79+
}
80+
81+
a1.f = 0x42;
82+
a2.f = 0x42;
83+
84+
return v;
85+
}
86+
87+
static class A {
88+
A a;
89+
int f;
90+
}
6491
}

0 commit comments

Comments
 (0)