< prev index next >
src/hotspot/share/opto/escape.cpp
Print this page
*** 670,684 ****
Node* adr = n->in(MemNode::Address);
if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) {
add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
}
! if (!add_final_edges_unsafe_access(n, opcode)) {
! ELSE_FAIL("Op_StoreP");
! }
break;
}
case Op_AryEq:
case Op_HasNegatives:
case Op_StrComp:
case Op_StrEquals:
case Op_StrIndexOf:
--- 670,684 ----
Node* adr = n->in(MemNode::Address);
if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) {
add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
}
! if (add_final_edges_unsafe_access(n, opcode)) {
break;
}
+ ELSE_FAIL("Op_StoreP");
+ }
case Op_AryEq:
case Op_HasNegatives:
case Op_StrComp:
case Op_StrEquals:
case Op_StrIndexOf:
*** 755,774 ****
}
}
bool ConnectionGraph::add_final_edges_unsafe_access(Node* n, uint opcode) {
Node* adr = n->in(MemNode::Address);
! const Type* adr_type = _igvn->type(adr);
adr_type = adr_type->make_ptr();
#ifdef ASSERT
if (adr_type == NULL) {
n->dump(1);
assert(adr_type != NULL, "dead node should not be on list");
return true;
}
#endif
if (adr_type->isa_oopptr()
|| ((opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass)
&& adr_type == TypeRawPtr::NOTNULL
&& adr->in(AddPNode::Address)->is_Proj()
&& adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
--- 755,779 ----
}
}
bool ConnectionGraph::add_final_edges_unsafe_access(Node* n, uint opcode) {
Node* adr = n->in(MemNode::Address);
! const Type *adr_type = _igvn->type(adr);
adr_type = adr_type->make_ptr();
#ifdef ASSERT
if (adr_type == NULL) {
n->dump(1);
assert(adr_type != NULL, "dead node should not be on list");
return true;
}
#endif
+ if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
+ opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) {
+ add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
+ }
+
if (adr_type->isa_oopptr()
|| ((opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass)
&& adr_type == TypeRawPtr::NOTNULL
&& adr->in(AddPNode::Address)->is_Proj()
&& adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
< prev index next >