1.1 --- a/src/share/vm/opto/matcher.cpp Wed Mar 18 11:37:48 2009 -0400 1.2 +++ b/src/share/vm/opto/matcher.cpp Thu Mar 19 09:13:24 2009 -0700 1.3 @@ -1481,8 +1481,13 @@ 1.4 const Type* mach_at = mach->adr_type(); 1.5 // DecodeN node consumed by an address may have different type 1.6 // then its input. Don't compare types for such case. 1.7 - if (m->adr_type() != mach_at && m->in(MemNode::Address)->is_AddP() && 1.8 - m->in(MemNode::Address)->in(AddPNode::Address)->is_DecodeN()) { 1.9 + if (m->adr_type() != mach_at && 1.10 + (m->in(MemNode::Address)->is_DecodeN() || 1.11 + m->in(MemNode::Address)->is_AddP() && 1.12 + m->in(MemNode::Address)->in(AddPNode::Address)->is_DecodeN() || 1.13 + m->in(MemNode::Address)->is_AddP() && 1.14 + m->in(MemNode::Address)->in(AddPNode::Address)->is_AddP() && 1.15 + m->in(MemNode::Address)->in(AddPNode::Address)->in(AddPNode::Address)->is_DecodeN())) { 1.16 mach_at = m->adr_type(); 1.17 } 1.18 if (m->adr_type() != mach_at) {