hotspot/src/share/vm/opto/subnode.cpp
changeset 1055 f4fb9fb08038
parent 781 e1baa9c8f16f
child 1058 52be2dbbdc79
equal deleted inserted replaced
965:15aa5abc6628 1055:f4fb9fb08038
   679   // Get the constant klass we are comparing to.
   679   // Get the constant klass we are comparing to.
   680   ciKlass* superklass = t2->klass();
   680   ciKlass* superklass = t2->klass();
   681 
   681 
   682   // Now check for LoadKlass on left.
   682   // Now check for LoadKlass on left.
   683   Node* ldk1 = in(1);
   683   Node* ldk1 = in(1);
   684   if (ldk1->Opcode() != Op_LoadKlass)
   684   if (ldk1->is_DecodeN()) {
       
   685     ldk1 = ldk1->in(1);
       
   686     if (ldk1->Opcode() != Op_LoadNKlass )
       
   687       return NULL;
       
   688   } else if (ldk1->Opcode() != Op_LoadKlass )
   685     return NULL;
   689     return NULL;
   686   // Take apart the address of the LoadKlass:
   690   // Take apart the address of the LoadKlass:
   687   Node* adr1 = ldk1->in(MemNode::Address);
   691   Node* adr1 = ldk1->in(MemNode::Address);
   688   intptr_t con2 = 0;
   692   intptr_t con2 = 0;
   689   Node* ldk2 = AddPNode::Ideal_base_and_offset(adr1, phase, con2);
   693   Node* ldk2 = AddPNode::Ideal_base_and_offset(adr1, phase, con2);
   700     }
   704     }
   701   }
   705   }
   702 
   706 
   703   // Check for a LoadKlass from primary supertype array.
   707   // Check for a LoadKlass from primary supertype array.
   704   // Any nested loadklass from loadklass+con must be from the p.s. array.
   708   // Any nested loadklass from loadklass+con must be from the p.s. array.
   705   if (ldk2->Opcode() != Op_LoadKlass)
   709   if (ldk2->is_DecodeN()) {
       
   710     // Keep ldk2 as DecodeN since it could be used in CmpP below.
       
   711     if (ldk2->in(1)->Opcode() != Op_LoadNKlass )
       
   712       return NULL;
       
   713   } else if (ldk2->Opcode() != Op_LoadKlass)
   706     return NULL;
   714     return NULL;
   707 
   715 
   708   // Verify that we understand the situation
   716   // Verify that we understand the situation
   709   if (con2 != (intptr_t) superklass->super_check_offset())
   717   if (con2 != (intptr_t) superklass->super_check_offset())
   710     return NULL;                // Might be element-klass loading from array klass
   718     return NULL;                // Might be element-klass loading from array klass