< prev index next >

src/hotspot/share/opto/ifnode.cpp

Print this page

        

*** 1218,1259 **** Node* bol = in(1); if (!bol->is_Bool() || bol->as_Bool()->_test._test != BoolTest::ne) { return false; } Node* cmp = bol->in(1); ! if (cmp->Opcode() != Op_CmpI) { return false; } Node* cmp_in1 = cmp->in(1); Node* cmp_in2 = cmp->in(2); ! if ((unsigned int)cmp_in2->find_int_con(0) != Klass::_lh_array_tag_vt_value) { ! return false; ! } ! if (cmp_in1->Opcode() != Op_RShiftI) { ! return false; ! } ! Node* shift_in1 = cmp_in1->in(1); ! Node* shift_in2 = cmp_in1->in(2); ! if ((unsigned int)shift_in2->find_int_con(0) != Klass::_lh_array_tag_shift) { ! return false; ! } ! if (shift_in1->Opcode() != Op_LoadI) { return false; } ! intptr_t offset; ! Node* ptr = shift_in1->in(MemNode::Address); ! Node* addr = AddPNode::Ideal_base_and_offset(ptr, phase, offset); ! if (addr == NULL || offset != in_bytes(Klass::layout_helper_offset())) { ! return false; } ! if (!phase->type(addr)->isa_klassptr()) { return false; } ! Node* klass_load = ptr->as_AddP()->in(AddPNode::Base)->uncast(); ! if (klass_load->is_DecodeNKlass()) { ! klass_load = klass_load->in(1); ! } if (klass_load->is_Load()) { Node* address = klass_load->in(MemNode::Address); array = address->as_AddP()->in(AddPNode::Base); } return true; --- 1218,1250 ---- Node* bol = in(1); if (!bol->is_Bool() || bol->as_Bool()->_test._test != BoolTest::ne) { return false; } Node* cmp = bol->in(1); ! if (cmp->Opcode() != Op_CmpI && cmp->Opcode() != Op_CmpL) { return false; } Node* cmp_in1 = cmp->in(1); Node* cmp_in2 = cmp->in(2); ! ! if (cmp_in1->Opcode() != Op_GetFlattenedProperty) { return false; } ! ! jlong in2 = -1; ! if (cmp->Opcode() == Op_CmpI) { ! in2 = cmp_in2->find_int_con(-1); ! } else { ! in2 = cmp_in2->find_long_con(-1); } ! ! if (in2 != 0) { return false; } ! ! Node* klass_load = cmp_in1->in(1); ! if (klass_load->is_Load()) { Node* address = klass_load->in(MemNode::Address); array = address->as_AddP()->in(AddPNode::Base); } return true;
< prev index next >