--- a/hotspot/src/share/vm/opto/macro.cpp Sat Jan 07 13:26:43 2012 -0800
+++ b/hotspot/src/share/vm/opto/macro.cpp Tue Jan 10 18:05:38 2012 -0800
@@ -1818,7 +1818,7 @@
AbstractLockNode* alock = u->as_AbstractLock();
// Check lock's box since box could be referenced by Lock's debug info.
if (alock->box_node() == oldbox) {
- assert(alock->obj_node() == obj, "");
+ assert(alock->obj_node()->eqv_uncast(obj), "");
// Mark eliminated all related locks and unlocks.
alock->set_non_esc_obj();
}
@@ -1845,7 +1845,7 @@
Node* u = oldbox->raw_out(i);
if (u->is_AbstractLock()) {
AbstractLockNode* alock = u->as_AbstractLock();
- if (alock->obj_node() == obj && alock->box_node() == oldbox) {
+ if (alock->box_node() == oldbox && alock->obj_node()->eqv_uncast(obj)) {
// Replace Box and mark eliminated all related locks and unlocks.
alock->set_non_esc_obj();
_igvn.hash_delete(alock);
@@ -1854,7 +1854,7 @@
next_edge = false;
}
}
- if (u->is_FastLock() && u->as_FastLock()->obj_node() == obj) {
+ if (u->is_FastLock() && u->as_FastLock()->obj_node()->eqv_uncast(obj)) {
FastLockNode* flock = u->as_FastLock();
assert(flock->box_node() == oldbox, "sanity");
_igvn.hash_delete(flock);
@@ -1875,7 +1875,7 @@
for (int idx = 0; idx < num_mon; idx++) {
Node* obj_node = sfn->monitor_obj(jvms, idx);
Node* box_node = sfn->monitor_box(jvms, idx);
- if (box_node == oldbox && obj_node == obj) {
+ if (box_node == oldbox && obj_node->eqv_uncast(obj)) {
int j = jvms->monitor_box_offset(idx);
_igvn.hash_delete(u);
u->set_req(j, newbox);
@@ -1912,7 +1912,7 @@
alock = u->as_AbstractLock();
if (alock->box_node() == box_node) {
// Verify that this Box is referenced only by related locks.
- assert(alock->obj_node() == obj, "");
+ assert(alock->obj_node()->eqv_uncast(obj), "");
// Mark all related locks and unlocks.
alock->set_nested();
}
@@ -1931,7 +1931,8 @@
Node* obj = alock->obj_node();
for (uint j = 0; j < obj->outcnt(); j++) {
Node* o = obj->raw_out(j);
- if (o->is_AbstractLock() && o->as_AbstractLock()->obj_node() == obj) {
+ if (o->is_AbstractLock() &&
+ o->as_AbstractLock()->obj_node()->eqv_uncast(obj)) {
alock = o->as_AbstractLock();
Node* box = alock->box_node();
// Replace old box node with new eliminated box for all users