src/share/vm/opto/callnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/callnode.cpp Tue Dec 2 23:49:25 2008
--- new/src/share/vm/opto/callnode.cpp Tue Dec 2 23:49:24 2008
*** 393,404 ****
--- 393,410 ----
st->print(" MON-BOX%d=%s+%d",
i,
OptoReg::regname(OptoReg::c_frame_pointer),
regalloc->reg2offset(box_reg));
}
! format_helper( regalloc, st, obj, "MON-OBJ[", i, &scobjs );
! const char* obj_msg = "MON-OBJ[";
+ if (EliminateLocks) {
+ while( !box->is_BoxLock() ) box = box->in(1);
+ if (box->as_BoxLock()->is_eliminated())
+ obj_msg = "MON-OBJ(LOCK ELIMINATED)[";
}
+ format_helper( regalloc, st, obj, obj_msg, i, &scobjs );
+ }
for (i = 0; i < (uint)scobjs.length(); i++) {
// Scalar replaced objects.
st->print_cr("");
st->print(" # ScObj" INT32_FORMAT " ", i);
*** 906,917 ****
--- 912,924 ----
int nextmon = jvms()->scloff();
if (GenerateSynchronizationCode) {
add_req(lock->box_node());
add_req(lock->obj_node());
} else {
! add_req(NULL);
! add_req(NULL);
! Node* top = Compile::current()->top();
! add_req(top);
+ add_req(top);
}
jvms()->set_scloff(nextmon+MonitorEdges);
jvms()->set_endoff(req());
}
*** 1380,1390 ****
--- 1387,1397 ----
// one computed above.
if (result == NULL && can_reshape && EliminateLocks && !is_eliminated()) {
//
// If we are locking an unescaped object, the lock/unlock is unnecessary
//
! ConnectionGraph *cgr = Compile::current()->congraph();
! ConnectionGraph *cgr = phase->C->congraph();
PointsToNode::EscapeState es = PointsToNode::GlobalEscape;
if (cgr != NULL)
es = cgr->escape_state(obj_node(), phase);
if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
// Mark it eliminated to update any counters
*** 1448,1457 ****
--- 1455,1465 ----
for (int i = 0; i < lock_ops.length(); i++) {
AbstractLockNode* lock = lock_ops.at(i);
// Mark it eliminated to update any counters
lock->set_eliminated();
+ lock->set_coarsened();
}
} else if (result != NULL && ctrl->is_Region() &&
iter->_worklist.member(ctrl)) {
// We weren't able to find any opportunities but the region this
// lock is control dependent on hasn't been processed yet so put
*** 1482,1492 ****
--- 1490,1500 ----
// Escape state is defined after Parse phase.
if (result == NULL && can_reshape && EliminateLocks && !is_eliminated()) {
//
// If we are unlocking an unescaped object, the lock/unlock is unnecessary.
//
! ConnectionGraph *cgr = Compile::current()->congraph();
! ConnectionGraph *cgr = phase->C->congraph();
PointsToNode::EscapeState es = PointsToNode::GlobalEscape;
if (cgr != NULL)
es = cgr->escape_state(obj_node(), phase);
if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
// Mark it eliminated to update any counters
src/share/vm/opto/callnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File