src/share/vm/opto/memnode.cpp

Print this page
rev 2571 : [mq]: membar3

*** 923,934 **** // through any kind of MemBar but normal loads shouldn't skip // through MemBarAcquire since the could allow them to move out of // a synchronized region. while (current->is_Proj()) { int opc = current->in(0)->Opcode(); ! if ((final && opc == Op_MemBarAcquire) || ! opc == Op_MemBarRelease || opc == Op_MemBarCPUOrder) { Node* mem = current->in(0)->in(TypeFunc::Memory); if (mem->is_MergeMem()) { MergeMemNode* merge = mem->as_MergeMem(); Node* new_st = merge->memory_at(alias_idx); if (new_st == merge->base_memory()) { --- 923,935 ---- // through any kind of MemBar but normal loads shouldn't skip // through MemBarAcquire since the could allow them to move out of // a synchronized region. while (current->is_Proj()) { int opc = current->in(0)->Opcode(); ! if ((final && (opc == Op_MemBarAcquire || opc == Op_MemBarAcquireLock)) || ! opc == Op_MemBarRelease || opc == Op_MemBarCPUOrder || ! opc == Op_MemBarReleaseLock) { Node* mem = current->in(0)->in(TypeFunc::Memory); if (mem->is_MergeMem()) { MergeMemNode* merge = mem->as_MergeMem(); Node* new_st = merge->memory_at(alias_idx); if (new_st == merge->base_memory()) {
*** 2664,2673 **** --- 2665,2676 ---- MemBarNode* MemBarNode::make(Compile* C, int opcode, int atp, Node* pn) { int len = Precedent + (pn == NULL? 0: 1); switch (opcode) { case Op_MemBarAcquire: return new(C, len) MemBarAcquireNode(C, atp, pn); case Op_MemBarRelease: return new(C, len) MemBarReleaseNode(C, atp, pn); + case Op_MemBarAcquireLock: return new(C, len) MemBarAcquireLockNode(C, atp, pn); + case Op_MemBarReleaseLock: return new(C, len) MemBarReleaseLockNode(C, atp, pn); case Op_MemBarVolatile: return new(C, len) MemBarVolatileNode(C, atp, pn); case Op_MemBarCPUOrder: return new(C, len) MemBarCPUOrderNode(C, atp, pn); case Op_Initialize: return new(C, len) InitializeNode(C, atp, pn); default: ShouldNotReachHere(); return NULL; }