src/share/vm/opto/matcher.cpp

changeset 1082
bd441136a5ce
parent 1063
7bb995fbd3c0
parent 1077
660978a2a31a
child 1116
fbde8ec322d0
     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) {

mercurial