< prev index next >

src/hotspot/share/opto/callGenerator.cpp

Print this page

        

*** 536,545 **** --- 536,550 ---- // Only possible if is_mh_late_inline() when the callee does not "know" that the caller expects an oop assert(is_mh_late_inline() && !returned_as_fields, "sanity"); assert(buffer_oop != NULL, "should have allocated a buffer"); ValueTypeNode* vt = result->as_ValueType(); vt->store(&kit, buffer_oop, buffer_oop, vt->type()->value_klass(), 0); + // Do not let stores that initialize this buffer be reordered with a subsequent + // store that would make this buffer accessible by other threads. + AllocateNode* alloc = AllocateNode::Ideal_allocation(buffer_oop, &kit.gvn()); + assert(alloc != NULL, "must have an allocation node"); + kit.insert_mem_bar(Op_MemBarStoreStore, alloc->proj_out_or_null(AllocateNode::RawAddress)); result = buffer_oop; } else if (result->is_ValueTypePtr() && returned_as_fields) { result->as_ValueTypePtr()->replace_call_results(&kit, call, C); }
< prev index next >