< prev index next >
src/share/vm/opto/escape.cpp
Print this page
*** 2731,2740 ****
--- 2731,2741 ----
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,2767 ****
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");
--- 2746,2755 ----
*** 3192,3201 ****
--- 3180,3190 ----
// 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 >