Mercurial > hg > truffle
diff src/share/vm/opto/macro.cpp @ 588:ef3b3df478b9
Merge
author | trims |
---|---|
date | Wed, 25 Feb 2009 22:55:54 -0800 |
parents | 49a36a80b0c7 |
children | 523ded093c31 |
line wrap: on
line diff
--- a/src/share/vm/opto/macro.cpp Wed Feb 18 18:20:02 2009 -0800 +++ b/src/share/vm/opto/macro.cpp Wed Feb 25 22:55:54 2009 -0800 @@ -250,6 +250,15 @@ assert(adr_idx == Compile::AliasIdxRaw, "address must match or be raw"); } mem = mem->in(MemNode::Memory); + } else if (mem->Opcode() == Op_SCMemProj) { + assert(mem->in(0)->is_LoadStore(), "sanity"); + const TypePtr* atype = mem->in(0)->in(MemNode::Address)->bottom_type()->is_ptr(); + int adr_idx = Compile::current()->get_alias_index(atype); + if (adr_idx == alias_idx) { + assert(false, "Object is not scalar replaceable if a LoadStore node access its field"); + return NULL; + } + mem = mem->in(0)->in(MemNode::Memory); } else { return mem; } @@ -329,8 +338,15 @@ return NULL; } values.at_put(j, val); + } else if (val->Opcode() == Op_SCMemProj) { + assert(val->in(0)->is_LoadStore(), "sanity"); + assert(false, "Object is not scalar replaceable if a LoadStore node access its field"); + return NULL; } else { +#ifdef ASSERT + val->dump(); assert(false, "unknown node on this path"); +#endif return NULL; // unknown node on this path } }