Mercurial > hg > truffle
diff src/share/vm/opto/memnode.cpp @ 2417:cb162b348743
7032696: Fix for 7029152 broke VM
Summary: StrIntrinsicNode::Ideal() should not optimize memory during Parse.
Reviewed-by: jrose, never
author | kvn |
---|---|
date | Thu, 31 Mar 2011 13:22:34 -0700 |
parents | f9424955eb18 |
children | 92add02409c9 66b0e2371912 |
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.cpp Thu Mar 31 02:31:57 2011 -0700 +++ b/src/share/vm/opto/memnode.cpp Thu Mar 31 13:22:34 2011 -0700 @@ -2628,12 +2628,16 @@ 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; }