561 TypePtr::NOTNULL = TypePtr::make(AnyPtr, TypePtr::NotNull, OffsetBot);
562 TypePtr::BOTTOM = TypePtr::make(AnyPtr, TypePtr::BotPTR, OffsetBot);
563
564 TypeRawPtr::BOTTOM = TypeRawPtr::make( TypePtr::BotPTR );
565 TypeRawPtr::NOTNULL= TypeRawPtr::make( TypePtr::NotNull );
566
567 const Type **fmembar = TypeTuple::fields(0);
568 TypeTuple::MEMBAR = TypeTuple::make(TypeFunc::Parms+0, fmembar);
569
570 const Type **fsc = (const Type**)shared_type_arena->AmallocWords(2*sizeof(Type*));
571 fsc[0] = TypeInt::CC;
572 fsc[1] = Type::MEMORY;
573 TypeTuple::STORECONDITIONAL = TypeTuple::make(2, fsc);
574
575 TypeInstPtr::NOTNULL = TypeInstPtr::make(TypePtr::NotNull, current->env()->Object_klass());
576 TypeInstPtr::BOTTOM = TypeInstPtr::make(TypePtr::BotPTR, current->env()->Object_klass());
577 TypeInstPtr::MIRROR = TypeInstPtr::make(TypePtr::NotNull, current->env()->Class_klass());
578 TypeInstPtr::MARK = TypeInstPtr::make(TypePtr::BotPTR, current->env()->Object_klass(),
579 false, nullptr, oopDesc::mark_offset_in_bytes());
580 TypeInstPtr::KLASS = TypeInstPtr::make(TypePtr::BotPTR, current->env()->Object_klass(),
581 false, nullptr, oopDesc::klass_offset_in_bytes());
582 TypeOopPtr::BOTTOM = TypeOopPtr::make(TypePtr::BotPTR, OffsetBot, TypeOopPtr::InstanceBot);
583
584 TypeMetadataPtr::BOTTOM = TypeMetadataPtr::make(TypePtr::BotPTR, nullptr, OffsetBot);
585
586 TypeNarrowOop::NULL_PTR = TypeNarrowOop::make( TypePtr::NULL_PTR );
587 TypeNarrowOop::BOTTOM = TypeNarrowOop::make( TypeInstPtr::BOTTOM );
588
589 TypeNarrowKlass::NULL_PTR = TypeNarrowKlass::make( TypePtr::NULL_PTR );
590
591 mreg2type[Op_Node] = Type::BOTTOM;
592 mreg2type[Op_Set ] = nullptr;
593 mreg2type[Op_RegN] = TypeNarrowOop::BOTTOM;
594 mreg2type[Op_RegI] = TypeInt::INT;
595 mreg2type[Op_RegP] = TypePtr::BOTTOM;
596 mreg2type[Op_RegF] = Type::FLOAT;
597 mreg2type[Op_RegD] = Type::DOUBLE;
598 mreg2type[Op_RegL] = TypeLong::LONG;
599 mreg2type[Op_RegFlags] = TypeInt::CC;
600
601 GrowableArray<ciInstanceKlass*> array_interfaces;
3491 int instance_id, const TypePtr* speculative, int inline_depth)
3492 : TypePtr(t, ptr, offset, relocInfo::oop_type, speculative, inline_depth),
3493 _const_oop(o), _klass(k),
3494 _interfaces(interfaces),
3495 _klass_is_exact(xk),
3496 _is_ptr_to_narrowoop(false),
3497 _is_ptr_to_narrowklass(false),
3498 _is_ptr_to_boxed_value(false),
3499 _instance_id(instance_id) {
3500 #ifdef ASSERT
3501 if (klass() != nullptr && klass()->is_loaded()) {
3502 interfaces->verify_is_loaded();
3503 }
3504 #endif
3505 if (Compile::current()->eliminate_boxing() && (t == InstPtr) &&
3506 (offset > 0) && xk && (k != nullptr) && k->is_instance_klass()) {
3507 _is_ptr_to_boxed_value = k->as_instance_klass()->is_boxed_value_offset(offset);
3508 }
3509 #ifdef _LP64
3510 if (_offset > 0 || _offset == Type::OffsetTop || _offset == Type::OffsetBot) {
3511 if (_offset == oopDesc::klass_offset_in_bytes()) {
3512 _is_ptr_to_narrowklass = true;
3513 } else if (klass() == nullptr) {
3514 // Array with unknown body type
3515 assert(this->isa_aryptr(), "only arrays without klass");
3516 _is_ptr_to_narrowoop = UseCompressedOops;
3517 } else if (this->isa_aryptr()) {
3518 _is_ptr_to_narrowoop = (UseCompressedOops && klass()->is_obj_array_klass() &&
3519 _offset != arrayOopDesc::length_offset_in_bytes());
3520 } else if (klass()->is_instance_klass()) {
3521 ciInstanceKlass* ik = klass()->as_instance_klass();
3522 if (this->isa_klassptr()) {
3523 // Perm objects don't use compressed references
3524 } else if (_offset == OffsetBot || _offset == OffsetTop) {
3525 // unsafe access
3526 _is_ptr_to_narrowoop = UseCompressedOops;
3527 } else {
3528 assert(this->isa_instptr(), "must be an instance ptr.");
3529
3530 if (klass() == ciEnv::current()->Class_klass() &&
3531 (_offset == java_lang_Class::klass_offset() ||
|
561 TypePtr::NOTNULL = TypePtr::make(AnyPtr, TypePtr::NotNull, OffsetBot);
562 TypePtr::BOTTOM = TypePtr::make(AnyPtr, TypePtr::BotPTR, OffsetBot);
563
564 TypeRawPtr::BOTTOM = TypeRawPtr::make( TypePtr::BotPTR );
565 TypeRawPtr::NOTNULL= TypeRawPtr::make( TypePtr::NotNull );
566
567 const Type **fmembar = TypeTuple::fields(0);
568 TypeTuple::MEMBAR = TypeTuple::make(TypeFunc::Parms+0, fmembar);
569
570 const Type **fsc = (const Type**)shared_type_arena->AmallocWords(2*sizeof(Type*));
571 fsc[0] = TypeInt::CC;
572 fsc[1] = Type::MEMORY;
573 TypeTuple::STORECONDITIONAL = TypeTuple::make(2, fsc);
574
575 TypeInstPtr::NOTNULL = TypeInstPtr::make(TypePtr::NotNull, current->env()->Object_klass());
576 TypeInstPtr::BOTTOM = TypeInstPtr::make(TypePtr::BotPTR, current->env()->Object_klass());
577 TypeInstPtr::MIRROR = TypeInstPtr::make(TypePtr::NotNull, current->env()->Class_klass());
578 TypeInstPtr::MARK = TypeInstPtr::make(TypePtr::BotPTR, current->env()->Object_klass(),
579 false, nullptr, oopDesc::mark_offset_in_bytes());
580 TypeInstPtr::KLASS = TypeInstPtr::make(TypePtr::BotPTR, current->env()->Object_klass(),
581 false, nullptr, Type::klass_offset());
582 TypeOopPtr::BOTTOM = TypeOopPtr::make(TypePtr::BotPTR, OffsetBot, TypeOopPtr::InstanceBot);
583
584 TypeMetadataPtr::BOTTOM = TypeMetadataPtr::make(TypePtr::BotPTR, nullptr, OffsetBot);
585
586 TypeNarrowOop::NULL_PTR = TypeNarrowOop::make( TypePtr::NULL_PTR );
587 TypeNarrowOop::BOTTOM = TypeNarrowOop::make( TypeInstPtr::BOTTOM );
588
589 TypeNarrowKlass::NULL_PTR = TypeNarrowKlass::make( TypePtr::NULL_PTR );
590
591 mreg2type[Op_Node] = Type::BOTTOM;
592 mreg2type[Op_Set ] = nullptr;
593 mreg2type[Op_RegN] = TypeNarrowOop::BOTTOM;
594 mreg2type[Op_RegI] = TypeInt::INT;
595 mreg2type[Op_RegP] = TypePtr::BOTTOM;
596 mreg2type[Op_RegF] = Type::FLOAT;
597 mreg2type[Op_RegD] = Type::DOUBLE;
598 mreg2type[Op_RegL] = TypeLong::LONG;
599 mreg2type[Op_RegFlags] = TypeInt::CC;
600
601 GrowableArray<ciInstanceKlass*> array_interfaces;
3491 int instance_id, const TypePtr* speculative, int inline_depth)
3492 : TypePtr(t, ptr, offset, relocInfo::oop_type, speculative, inline_depth),
3493 _const_oop(o), _klass(k),
3494 _interfaces(interfaces),
3495 _klass_is_exact(xk),
3496 _is_ptr_to_narrowoop(false),
3497 _is_ptr_to_narrowklass(false),
3498 _is_ptr_to_boxed_value(false),
3499 _instance_id(instance_id) {
3500 #ifdef ASSERT
3501 if (klass() != nullptr && klass()->is_loaded()) {
3502 interfaces->verify_is_loaded();
3503 }
3504 #endif
3505 if (Compile::current()->eliminate_boxing() && (t == InstPtr) &&
3506 (offset > 0) && xk && (k != nullptr) && k->is_instance_klass()) {
3507 _is_ptr_to_boxed_value = k->as_instance_klass()->is_boxed_value_offset(offset);
3508 }
3509 #ifdef _LP64
3510 if (_offset > 0 || _offset == Type::OffsetTop || _offset == Type::OffsetBot) {
3511 if (_offset == Type::klass_offset()) {
3512 _is_ptr_to_narrowklass = true;
3513 } else if (klass() == nullptr) {
3514 // Array with unknown body type
3515 assert(this->isa_aryptr(), "only arrays without klass");
3516 _is_ptr_to_narrowoop = UseCompressedOops;
3517 } else if (this->isa_aryptr()) {
3518 _is_ptr_to_narrowoop = (UseCompressedOops && klass()->is_obj_array_klass() &&
3519 _offset != arrayOopDesc::length_offset_in_bytes());
3520 } else if (klass()->is_instance_klass()) {
3521 ciInstanceKlass* ik = klass()->as_instance_klass();
3522 if (this->isa_klassptr()) {
3523 // Perm objects don't use compressed references
3524 } else if (_offset == OffsetBot || _offset == OffsetTop) {
3525 // unsafe access
3526 _is_ptr_to_narrowoop = UseCompressedOops;
3527 } else {
3528 assert(this->isa_instptr(), "must be an instance ptr.");
3529
3530 if (klass() == ciEnv::current()->Class_klass() &&
3531 (_offset == java_lang_Class::klass_offset() ||
|