< prev index next >
src/share/vm/opto/parse2.cpp
Print this page
@@ -38,10 +38,14 @@
#include "opto/parse.hpp"
#include "opto/runtime.hpp"
#include "runtime/deoptimization.hpp"
#include "runtime/sharedRuntime.hpp"
+#if INCLUDE_ALL_GCS
+#include "gc_implementation/shenandoah/c2/shenandoahBarrierSetC2.hpp"
+#endif
+
extern int explicit_null_checks_inserted,
explicit_null_checks_elided;
//---------------------------------array_load----------------------------------
void Parse::array_load(BasicType elem_type) {
@@ -49,10 +53,15 @@
Node* adr = array_addressing(elem_type, 0, &elem);
if (stopped()) return; // guaranteed null or range check
dec_sp(2); // Pop array and index
const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(elem_type);
Node* ld = make_load(control(), adr, elem, elem_type, adr_type, MemNode::unordered);
+#if INCLUDE_ALL_GCS
+ if (UseShenandoahGC && (elem_type == T_OBJECT || elem_type == T_ARRAY)) {
+ ld = ShenandoahBarrierSetC2::bsc2()->load_reference_barrier(this, ld);
+ }
+#endif
push(ld);
}
//--------------------------------array_store----------------------------------
< prev index next >