src/share/vm/opto/memnode.cpp
Print this page
rev 2571 : [mq]: membar3
@@ -923,12 +923,13 @@
// 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) {
+ 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,10 +2665,12 @@
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;
}