< prev index next > src/hotspot/share/opto/callnode.cpp
Print this page
if (ctrl_proj != nullptr && ctrl_proj->_con == TypeFunc::Control) {
Node *n = ctrl_proj->in(0);
if (n != nullptr && n->is_Unlock()) {
UnlockNode *unlock = n->as_Unlock();
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
! Node* lock_obj = bs->step_over_gc_barrier(lock->obj_node());
! Node* unlock_obj = bs->step_over_gc_barrier(unlock->obj_node());
if (lock_obj->eqv_uncast(unlock_obj) &&
BoxLockNode::same_slot(lock->box_node(), unlock->box_node()) &&
!unlock->is_eliminated()) {
lock_ops.append(unlock);
return true;
if (ctrl_proj != nullptr && ctrl_proj->_con == TypeFunc::Control) {
Node *n = ctrl_proj->in(0);
if (n != nullptr && n->is_Unlock()) {
UnlockNode *unlock = n->as_Unlock();
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
! Node* lock_obj = lock->obj_node();
! Node* unlock_obj = unlock->obj_node();
if (lock_obj->eqv_uncast(unlock_obj) &&
BoxLockNode::same_slot(lock->box_node(), unlock->box_node()) &&
!unlock->is_eliminated()) {
lock_ops.append(unlock);
return true;
}
}
if (ctrl->is_Lock()) {
LockNode *lock = ctrl->as_Lock();
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
! Node* lock_obj = bs->step_over_gc_barrier(lock->obj_node());
! Node* unlock_obj = bs->step_over_gc_barrier(unlock->obj_node());
if (lock_obj->eqv_uncast(unlock_obj) &&
BoxLockNode::same_slot(lock->box_node(), unlock->box_node())) {
lock_result = lock;
}
}
}
}
if (ctrl->is_Lock()) {
LockNode *lock = ctrl->as_Lock();
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
! Node* lock_obj = lock->obj_node();
! Node* unlock_obj = unlock->obj_node();
if (lock_obj->eqv_uncast(unlock_obj) &&
BoxLockNode::same_slot(lock->box_node(), unlock->box_node())) {
lock_result = lock;
}
}
}
}
if (lock1_node != nullptr && lock1_node->is_Lock()) {
LockNode *lock1 = lock1_node->as_Lock();
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
! Node* lock_obj = bs->step_over_gc_barrier(lock->obj_node());
! Node* lock1_obj = bs->step_over_gc_barrier(lock1->obj_node());
if (lock_obj->eqv_uncast(lock1_obj) &&
BoxLockNode::same_slot(lock->box_node(), lock1->box_node()) &&
!lock1->is_eliminated()) {
lock_ops.append(lock1);
return true;
}
}
if (lock1_node != nullptr && lock1_node->is_Lock()) {
LockNode *lock1 = lock1_node->as_Lock();
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
! Node* lock_obj = lock->obj_node();
! Node* lock1_obj = lock1->obj_node();
if (lock_obj->eqv_uncast(lock1_obj) &&
BoxLockNode::same_slot(lock->box_node(), lock1->box_node()) &&
!lock1->is_eliminated()) {
lock_ops.append(lock1);
return true;
}
#endif
return false;
}
- BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
- obj = bs->step_over_gc_barrier(obj);
// Look for external lock for the same object.
SafePointNode* sfn = this->as_SafePoint();
JVMState* youngest_jvms = sfn->jvms();
int max_depth = youngest_jvms->depth();
for (int depth = 1; depth <= max_depth; depth++) {
JVMState* jvms = youngest_jvms->of_depth(depth);
int num_mon = jvms->nof_monitors();
// Loop over monitors
for (int idx = 0; idx < num_mon; idx++) {
Node* obj_node = sfn->monitor_obj(jvms, idx);
- obj_node = bs->step_over_gc_barrier(obj_node);
BoxLockNode* box_node = sfn->monitor_box(jvms, idx)->as_BoxLock();
if ((box_node->stack_slot() < stk_slot) && obj_node->eqv_uncast(obj)) {
box->set_nested();
return true;
}
< prev index next >