1.1 --- a/src/share/vm/opto/subnode.cpp Thu Jul 31 15:47:42 2008 -0700 1.2 +++ b/src/share/vm/opto/subnode.cpp Fri Aug 01 10:06:45 2008 -0700 1.3 @@ -681,7 +681,11 @@ 1.4 1.5 // Now check for LoadKlass on left. 1.6 Node* ldk1 = in(1); 1.7 - if (ldk1->Opcode() != Op_LoadKlass) 1.8 + if (ldk1->is_DecodeN()) { 1.9 + ldk1 = ldk1->in(1); 1.10 + if (ldk1->Opcode() != Op_LoadNKlass ) 1.11 + return NULL; 1.12 + } else if (ldk1->Opcode() != Op_LoadKlass ) 1.13 return NULL; 1.14 // Take apart the address of the LoadKlass: 1.15 Node* adr1 = ldk1->in(MemNode::Address); 1.16 @@ -702,7 +706,11 @@ 1.17 1.18 // Check for a LoadKlass from primary supertype array. 1.19 // Any nested loadklass from loadklass+con must be from the p.s. array. 1.20 - if (ldk2->Opcode() != Op_LoadKlass) 1.21 + if (ldk2->is_DecodeN()) { 1.22 + // Keep ldk2 as DecodeN since it could be used in CmpP below. 1.23 + if (ldk2->in(1)->Opcode() != Op_LoadNKlass ) 1.24 + return NULL; 1.25 + } else if (ldk2->Opcode() != Op_LoadKlass) 1.26 return NULL; 1.27 1.28 // Verify that we understand the situation