< 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 >