7032696: Fix for 7029152 broke VM

StrIntrinsicNode::Ideal() should not optimize memory during Parse.

Reviewed-by: jrose, never
This commit is contained in:
Vladimir Kozlov 2011-03-31 13:22:34 -07:00
parent c9e2dcda4b
commit 0493606cdd
2 changed files with 16 additions and 6 deletions

View file

@ -2628,12 +2628,16 @@ uint StrIntrinsicNode::match_edge(uint idx) const {
Node *StrIntrinsicNode::Ideal(PhaseGVN *phase, bool can_reshape) {
if (remove_dead_region(phase, can_reshape)) return this;
Node* mem = phase->transform(in(MemNode::Memory));
// If transformed to a MergeMem, get the desired slice
uint alias_idx = phase->C->get_alias_index(adr_type());
mem = mem->is_MergeMem() ? mem->as_MergeMem()->memory_at(alias_idx) : mem;
if (mem != in(MemNode::Memory))
set_req(MemNode::Memory, mem);
if (can_reshape) {
Node* mem = phase->transform(in(MemNode::Memory));
// If transformed to a MergeMem, get the desired slice
uint alias_idx = phase->C->get_alias_index(adr_type());
mem = mem->is_MergeMem() ? mem->as_MergeMem()->memory_at(alias_idx) : mem;
if (mem != in(MemNode::Memory)) {
set_req(MemNode::Memory, mem);
return this;
}
}
return NULL;
}