From faf23de54d81d70044d429f1081e10f2b6474e78 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Thu, 29 Oct 2020 12:55:54 +0000 Subject: [PATCH] 8255534: Shenandoah: Fix CmpP optimization wrt native-LRB Reviewed-by: shade --- .../share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp index f3bdac34e55..a78db987ac7 100644 --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp @@ -1059,14 +1059,19 @@ Node* ShenandoahBarrierSetC2::ideal_node(PhaseGVN* phase, Node* n, bool can_resh if (n->Opcode() == Op_CmpP) { Node* in1 = n->in(1); Node* in2 = n->in(2); + + // If one input is NULL, then step over the barriers (except LRB native) on the other input if (in1->bottom_type() == TypePtr::NULL_PTR && - (in1->Opcode() != Op_ShenandoahLoadReferenceBarrier || !((ShenandoahLoadReferenceBarrierNode*)in1)->is_native())) { + !((in2->Opcode() == Op_ShenandoahLoadReferenceBarrier) && + ((ShenandoahLoadReferenceBarrierNode*)in2)->is_native())) { in2 = step_over_gc_barrier(in2); } if (in2->bottom_type() == TypePtr::NULL_PTR && - (in2->Opcode() != Op_ShenandoahLoadReferenceBarrier || !((ShenandoahLoadReferenceBarrierNode*)in2)->is_native())) { + !((in1->Opcode() == Op_ShenandoahLoadReferenceBarrier) && + ((ShenandoahLoadReferenceBarrierNode*)in1)->is_native())) { in1 = step_over_gc_barrier(in1); } + PhaseIterGVN* igvn = phase->is_IterGVN(); if (in1 != n->in(1)) { if (igvn != NULL) {