< prev index next >

src/share/vm/opto/parse3.cpp

Print this page

        

*** 34,43 **** --- 34,47 ---- #include "opto/runtime.hpp" #include "opto/subnode.hpp" #include "runtime/deoptimization.hpp" #include "runtime/handles.inline.hpp" + #if INCLUDE_ALL_GCS + #include "gc_implementation/shenandoah/c2/shenandoahBarrierSetC2.hpp" + #endif + //============================================================================= // Helper methods for _get* and _put* bytecodes //============================================================================= bool Parse::static_field_ok_in_clinit(ciField *field, ciMethod *method) { // Could be the field_holder's <clinit> method, or <clinit> for a subklass.
*** 234,243 **** --- 238,254 ---- // Build the load. // MemNode::MemOrd mo = is_vol ? MemNode::acquire : MemNode::unordered; Node* ld = make_load(NULL, adr, type, bt, adr_type, mo, LoadNode::DependsOnlyOnTest, is_vol); + Node* load = ld; + #if INCLUDE_ALL_GCS + if (UseShenandoahGC && (bt == T_OBJECT || bt == T_ARRAY)) { + ld = ShenandoahBarrierSetC2::bsc2()->load_reference_barrier(this, ld); + } + #endif + // Adjust Java stack if (type2size[bt] == 1) push(ld); else push_pair(ld);
*** 272,282 **** // floating up past the volatile read. Also prevents commoning // another volatile read. if (field->is_volatile()) { // Memory barrier includes bogus read of value to force load BEFORE membar assert(leading_membar == NULL || support_IRIW_for_not_multiple_copy_atomic_cpu, "no leading membar expected"); ! Node* mb = insert_mem_bar(Op_MemBarAcquire, ld); mb->as_MemBar()->set_trailing_load(); } } void Parse::do_put_xxx(Node* obj, ciField* field, bool is_field) { --- 283,293 ---- // floating up past the volatile read. Also prevents commoning // another volatile read. if (field->is_volatile()) { // Memory barrier includes bogus read of value to force load BEFORE membar assert(leading_membar == NULL || support_IRIW_for_not_multiple_copy_atomic_cpu, "no leading membar expected"); ! Node* mb = insert_mem_bar(Op_MemBarAcquire, load); mb->as_MemBar()->set_trailing_load(); } } void Parse::do_put_xxx(Node* obj, ciField* field, bool is_field) {
< prev index next >