< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page

        

*** 3424,3435 **** if (address->isa_AddP()) { array = address->as_AddP()->in(AddPNode::Base); } } else if (obj->is_Phi()) { Node* region = obj->in(0); ! if (region->req() == 3 && region->in(2) != NULL) { ! IfNode* iff = region->in(2)->in(0)->isa_If(); if (iff != NULL) { iff->is_flattened_array_check(&_gvn, array); } } } --- 3424,3435 ---- if (address->isa_AddP()) { array = address->as_AddP()->in(AddPNode::Base); } } else if (obj->is_Phi()) { Node* region = obj->in(0); ! if (region->req() == 3 && region->in(1) != NULL) { ! IfNode* iff = region->in(1)->in(0)->isa_If(); if (iff != NULL) { iff->is_flattened_array_check(&_gvn, array); } } }
*** 3511,3520 **** --- 3511,3534 ---- cmp = _gvn.transform(new CmpINode(null_free, zerocon(T_INT))); } return _gvn.transform(new BoolNode(cmp, BoolTest::eq)); } + Node* GraphKit::gen_flattened_array_test(Node* ary) { + assert(EnableValhalla, "should only be used if value types are enabled"); + // Extract flattened property from klass pointer + Node* k_adr = basic_plus_adr(ary, oopDesc::klass_offset_in_bytes()); + const TypePtr* k_adr_type = k_adr->bottom_type()->isa_ptr(); + Node* klass = NULL; + if (k_adr_type->is_ptr_to_narrowklass()) { + klass = _gvn.transform(new LoadNKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT->make_narrowklass(), MemNode::unordered)); + } else { + klass = _gvn.transform(new LoadKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT, MemNode::unordered)); + } + return _gvn.transform(new GetFlattenedPropertyNode(klass)); + } + // Deoptimize if 'ary' is a null-free value type array and 'val' is null Node* GraphKit::gen_value_array_null_guard(Node* ary, Node* val, int nargs, bool safe_for_replace) { const Type* val_t = _gvn.type(val); if (val->is_ValueType() || !TypePtr::NULL_PTR->higher_equal(val_t)) { return ary; // Never null
*** 4394,4404 **** } Node* GraphKit::load_String_value(Node* str, bool set_ctrl) { int value_offset = java_lang_String::value_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0)); const TypePtr* value_field_type = string_type->add_offset(value_offset); const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::BYTE, TypeInt::POS, false, true, true), ciTypeArrayKlass::make(T_BYTE), true, Type::Offset(0)); Node* p = basic_plus_adr(str, str, value_offset); --- 4408,4418 ---- } Node* GraphKit::load_String_value(Node* str, bool set_ctrl) { int value_offset = java_lang_String::value_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0), false); const TypePtr* value_field_type = string_type->add_offset(value_offset); const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::BYTE, TypeInt::POS, false, true, true), ciTypeArrayKlass::make(T_BYTE), true, Type::Offset(0)); Node* p = basic_plus_adr(str, str, value_offset);
*** 4411,4421 **** if (!CompactStrings) { return intcon(java_lang_String::CODER_UTF16); } int coder_offset = java_lang_String::coder_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0)); const TypePtr* coder_field_type = string_type->add_offset(coder_offset); Node* p = basic_plus_adr(str, str, coder_offset); Node* load = access_load_at(str, p, coder_field_type, TypeInt::BYTE, T_BYTE, IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED); --- 4425,4435 ---- if (!CompactStrings) { return intcon(java_lang_String::CODER_UTF16); } int coder_offset = java_lang_String::coder_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0), false); const TypePtr* coder_field_type = string_type->add_offset(coder_offset); Node* p = basic_plus_adr(str, str, coder_offset); Node* load = access_load_at(str, p, coder_field_type, TypeInt::BYTE, T_BYTE, IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
*** 4423,4443 **** } void GraphKit::store_String_value(Node* str, Node* value) { int value_offset = java_lang_String::value_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0)); const TypePtr* value_field_type = string_type->add_offset(value_offset); access_store_at(str, basic_plus_adr(str, value_offset), value_field_type, value, TypeAryPtr::BYTES, T_OBJECT, IN_HEAP | MO_UNORDERED); } void GraphKit::store_String_coder(Node* str, Node* value) { int coder_offset = java_lang_String::coder_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0)); const TypePtr* coder_field_type = string_type->add_offset(coder_offset); access_store_at(str, basic_plus_adr(str, coder_offset), coder_field_type, value, TypeInt::BYTE, T_BYTE, IN_HEAP | MO_UNORDERED); } --- 4437,4457 ---- } void GraphKit::store_String_value(Node* str, Node* value) { int value_offset = java_lang_String::value_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0), false); const TypePtr* value_field_type = string_type->add_offset(value_offset); access_store_at(str, basic_plus_adr(str, value_offset), value_field_type, value, TypeAryPtr::BYTES, T_OBJECT, IN_HEAP | MO_UNORDERED); } void GraphKit::store_String_coder(Node* str, Node* value) { int coder_offset = java_lang_String::coder_offset_in_bytes(); const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), ! false, NULL, Type::Offset(0), false); const TypePtr* coder_field_type = string_type->add_offset(coder_offset); access_store_at(str, basic_plus_adr(str, coder_offset), coder_field_type, value, TypeInt::BYTE, T_BYTE, IN_HEAP | MO_UNORDERED); }
< prev index next >