8254314: Shenandoah: null checks in c2 should not skip over native load barrier

Reviewed-by: rkennke
diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
index 67d05ec..19b01dd 100644
--- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
+++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
@@ -1058,10 +1058,12 @@
   if (n->Opcode() == Op_CmpP) {
     Node* in1 = n->in(1);
     Node* in2 = n->in(2);
-    if (in1->bottom_type() == TypePtr::NULL_PTR) {
+    if (in1->bottom_type() == TypePtr::NULL_PTR &&
+        (in1->Opcode() != Op_ShenandoahLoadReferenceBarrier || !((ShenandoahLoadReferenceBarrierNode*)in1)->is_native())) {
       in2 = step_over_gc_barrier(in2);
     }
-    if (in2->bottom_type() == TypePtr::NULL_PTR) {
+    if (in2->bottom_type() == TypePtr::NULL_PTR &&
+        (in2->Opcode() != Op_ShenandoahLoadReferenceBarrier || !((ShenandoahLoadReferenceBarrierNode*)in2)->is_native())) {
       in1 = step_over_gc_barrier(in1);
     }
     PhaseIterGVN* igvn = phase->is_IterGVN();