< prev index next >
src/share/vm/opto/escape.cpp
Print this page
@@ -2731,10 +2731,11 @@
Node* adr = NULL;
if (mem->is_LoadStore()) {
adr = mem->in(MemNode::Address);
} else {
assert(mem->Opcode() == Op_EncodeISOArray ||
+ mem->Opcode() == Op_StrInflatedCopy ||
mem->Opcode() == Op_StrCompressedCopy, "sanity");
adr = mem->in(3); // Memory edge corresponds to destination array
}
const Type *at = igvn->type(adr);
if (at != Type::TOP) {
@@ -2745,23 +2746,10 @@
assert(false, "Object is not scalar replaceable if a LoadStore node accesses its field");
break; // In product mode return SCMemProj node
}
}
result = mem->in(MemNode::Memory);
- } else if (result->Opcode() == Op_StrInflatedCopy) {
- Node* adr = result->in(3); // Memory edge corresponds to destination array
- const Type *at = igvn->type(adr);
- if (at != Type::TOP) {
- assert(at->isa_ptr() != NULL, "pointer type required.");
- int idx = C->get_alias_index(at->is_ptr());
- if (idx == alias_idx) {
- // Assert in debug mode
- assert(false, "Object is not scalar replaceable if a StrInflatedCopy node accesses its field");
- break; // In product mode return SCMemProj node
- }
- }
- result = result->in(MemNode::Memory);
}
}
if (result->is_Phi()) {
PhiNode *mphi = result->as_Phi();
assert(mphi->bottom_type() == Type::MEMORY, "memory phi required");
@@ -3192,10 +3180,11 @@
// we don't need to do anything, but the users must be pushed
n = n->as_MemBar()->proj_out(TypeFunc::Memory);
if (n == NULL)
continue;
} else if (n->Opcode() == Op_StrCompressedCopy ||
+ n->Opcode() == Op_StrInflatedCopy ||
n->Opcode() == Op_EncodeISOArray) {
// get the memory projection
n = n->find_out_with(Op_SCMemProj);
assert(n->Opcode() == Op_SCMemProj, "memory projection required");
} else {
< prev index next >