Skip to content

Commit faf23de

Browse files
committed
8255534: Shenandoah: Fix CmpP optimization wrt native-LRB
Reviewed-by: shade
1 parent 579e50b commit faf23de

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,14 +1059,19 @@ Node* ShenandoahBarrierSetC2::ideal_node(PhaseGVN* phase, Node* n, bool can_resh
10591059
if (n->Opcode() == Op_CmpP) {
10601060
Node* in1 = n->in(1);
10611061
Node* in2 = n->in(2);
1062+
1063+
// If one input is NULL, then step over the barriers (except LRB native) on the other input
10621064
if (in1->bottom_type() == TypePtr::NULL_PTR &&
1063-
(in1->Opcode() != Op_ShenandoahLoadReferenceBarrier || !((ShenandoahLoadReferenceBarrierNode*)in1)->is_native())) {
1065+
!((in2->Opcode() == Op_ShenandoahLoadReferenceBarrier) &&
1066+
((ShenandoahLoadReferenceBarrierNode*)in2)->is_native())) {
10641067
in2 = step_over_gc_barrier(in2);
10651068
}
10661069
if (in2->bottom_type() == TypePtr::NULL_PTR &&
1067-
(in2->Opcode() != Op_ShenandoahLoadReferenceBarrier || !((ShenandoahLoadReferenceBarrierNode*)in2)->is_native())) {
1070+
!((in1->Opcode() == Op_ShenandoahLoadReferenceBarrier) &&
1071+
((ShenandoahLoadReferenceBarrierNode*)in1)->is_native())) {
10681072
in1 = step_over_gc_barrier(in1);
10691073
}
1074+
10701075
PhaseIterGVN* igvn = phase->is_IterGVN();
10711076
if (in1 != n->in(1)) {
10721077
if (igvn != NULL) {

0 commit comments

Comments
 (0)