equal
deleted
inserted
replaced
596 assert(field_type != NULL, "field singleton type must be consistent"); |
596 assert(field_type != NULL, "field singleton type must be consistent"); |
597 } else { |
597 } else { |
598 field_type = TypeOopPtr::make_from_klass(elem_type->as_klass()); |
598 field_type = TypeOopPtr::make_from_klass(elem_type->as_klass()); |
599 } |
599 } |
600 if (UseCompressedOops) { |
600 if (UseCompressedOops) { |
601 field_type = field_type->is_oopptr()->make_narrowoop(); |
601 field_type = field_type->make_narrowoop(); |
602 basic_elem_type = T_NARROWOOP; |
602 basic_elem_type = T_NARROWOOP; |
603 } |
603 } |
604 } else { |
604 } else { |
605 field_type = Type::get_const_basic_type(basic_elem_type); |
605 field_type = Type::get_const_basic_type(basic_elem_type); |
606 } |
606 } |
664 return false; |
664 return false; |
665 } |
665 } |
666 if (UseCompressedOops && field_type->isa_narrowoop()) { |
666 if (UseCompressedOops && field_type->isa_narrowoop()) { |
667 // Enable "DecodeN(EncodeP(Allocate)) --> Allocate" transformation |
667 // Enable "DecodeN(EncodeP(Allocate)) --> Allocate" transformation |
668 // to be able scalar replace the allocation. |
668 // to be able scalar replace the allocation. |
669 _igvn.set_delay_transform(false); |
669 if (field_val->is_EncodeP()) { |
670 field_val = DecodeNNode::decode(&_igvn, field_val); |
670 field_val = field_val->in(1); |
671 _igvn.set_delay_transform(true); |
671 } else { |
|
672 field_val = transform_later(new (C, 2) DecodeNNode(field_val, field_val->bottom_type()->make_ptr())); |
|
673 } |
672 } |
674 } |
673 sfpt->add_req(field_val); |
675 sfpt->add_req(field_val); |
674 } |
676 } |
675 JVMState *jvms = sfpt->jvms(); |
677 JVMState *jvms = sfpt->jvms(); |
676 jvms->set_endoff(sfpt->req()); |
678 jvms->set_endoff(sfpt->req()); |