< prev index next >

src/share/vm/opto/graphKit.cpp

Print this page
rev 11994 : 8252366: Shenandoah: revert/cleanup changes in graphKit.cpp
Reviewed-by: XXX

@@ -1719,12 +1719,16 @@
   BasicType elembt = elemtype->array_element_basic_type();
   Node* adr = array_element_address(ary, idx, elembt, arytype->size());
   if (elembt == T_NARROWOOP) {
     elembt = T_OBJECT; // To satisfy switch in LoadNode::make()
   }
-  assert(elembt != T_OBJECT && elembt != T_ARRAY, "sanity");
   Node* ld = make_load(ctl, adr, elemtype, elembt, arytype, MemNode::unordered);
+#if INCLUDE_ALL_GCS
+  if (UseShenandoahGC && (elembt == T_OBJECT || elembt == T_ARRAY)) {
+    ld = ShenandoahBarrierSetC2::bsc2()->load_reference_barrier(this, ld);
+  }
+#endif
   return ld;
 }
 
 //-------------------------set_arguments_for_java_call-------------------------
 // Arguments (pre-popped from the stack) are taken from the JVMS.

@@ -3882,19 +3886,10 @@
 
   // Final sync IdealKit and GraphKit.
   final_sync(ideal);
 }
 
-static void g1_write_barrier_pre_helper(const GraphKit& kit, Node* adr) {
-  if (UseShenandoahGC && adr != NULL) {
-    Node* c = kit.control();
-    Node* call = c->in(1)->in(1)->in(1)->in(0);
-    assert(call->is_g1_wb_pre_call(), "g1_wb_pre call expected");
-    call->add_req(adr);
-  }
-}
-
 // G1 pre/post barriers
 void GraphKit::g1_write_barrier_pre(bool do_load,
                                     Node* obj,
                                     Node* adr,
                                     uint alias_idx,

@@ -3998,11 +3993,19 @@
     } __ end_if();  // (pre_val != NULL)
   } __ end_if();  // (!marking)
 
   // Final sync IdealKit and GraphKit.
   final_sync(ideal);
-  g1_write_barrier_pre_helper(*this, adr);
+
+#if INCLUDE_ALL_GCS
+  if (UseShenandoahGC && adr != NULL) {
+    Node* c = control();
+    Node* call = c->in(1)->in(1)->in(1)->in(0);
+    assert(call->is_g1_wb_pre_call(), "g1_wb_pre call expected");
+    call->add_req(adr);
+  }
+#endif
 }
 
 //
 // Update the card table and add card address to the queue
 //
< prev index next >