Mercurial > hg > graal-compiler
comparison src/share/vm/opto/subnode.cpp @ 293:c3e045194476
6731641: assert(m->adr_type() == mach->adr_type(),"matcher should not change adr type")
Summary: fixed few addP node type and narrow oop type problems.
Reviewed-by: rasbold, never
author | kvn |
---|---|
date | Fri, 01 Aug 2008 10:06:45 -0700 |
parents | 9c2ecc2ffb12 |
children | ce93a51457ae |
comparison
equal
deleted
inserted
replaced
257:40b69ca33f4b | 293:c3e045194476 |
---|---|
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 |