< prev index next > src/hotspot/share/gc/shared/c2/barrierSetC2.cpp
Print this page
_preserve.remove(OptoReg::as_OptoReg(vm_reg));
vm_reg = vm_reg->next();
} while (vm_reg->is_Register() && !vm_reg->is_concrete());
}
+ bool BarrierStubC2::is_preserved(Register r) {
+ const VMReg vm_reg = r->as_VMReg();
+ assert(vm_reg->is_Register(), "r must be a general-purpose register");
+ return _preserve.member(OptoReg::as_OptoReg(vm_reg));
+ }
+
const RegMask& BarrierStubC2::preserve_set() const {
return _preserve;
}
Node* BarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const {
const uint mem_index = block_index(mem_block, mem);
if (access_block == mem_block) {
// Earlier accesses in the same block
if (mem_index < access_index && !block_has_safepoint(mem_block, mem_index + 1, access_index)) {
! elide_dominated_barrier(access);
}
} else if (mem_block->dominates(access_block)) {
// Dominating block? Look around for safepoints
ResourceMark rm;
Block_List stack;
const uint mem_index = block_index(mem_block, mem);
if (access_block == mem_block) {
// Earlier accesses in the same block
if (mem_index < access_index && !block_has_safepoint(mem_block, mem_index + 1, access_index)) {
! elide_dominated_barrier(access, mem->is_Mach() ? mem->as_Mach() : nullptr);
}
} else if (mem_block->dominates(access_block)) {
// Dominating block? Look around for safepoints
ResourceMark rm;
Block_List stack;
stack.push(pred);
}
}
if (!safepoint_found) {
! elide_dominated_barrier(access);
}
}
}
}
}
stack.push(pred);
}
}
if (!safepoint_found) {
! elide_dominated_barrier(access, mem->is_Mach() ? mem->as_Mach() : nullptr);
}
}
}
}
}
< prev index next >