< prev index next >

src/hotspot/share/opto/compile.cpp

Print this page

        

*** 468,478 **** assert(compile == Compile::current(), "sanity"); compile->set_type_dict(NULL); compile->set_clone_map(new Dict(cmpkey, hashkey, _compile->comp_arena())); compile->clone_map().set_clone_idx(0); - compile->set_type_hwm(NULL); compile->set_type_last_size(0); compile->set_last_tf(NULL, NULL); compile->set_indexSet_arena(NULL); compile->set_indexSet_free_block_list(NULL); compile->init_type_arena(); --- 468,477 ----
*** 1492,1501 **** --- 1491,1509 ---- const TypeAryPtr *ta = tj->isa_aryptr(); if (ta && ta->is_stable()) { // Erase stability property for alias analysis. tj = ta = ta->cast_to_stable(false); } + if (ta && ta->is_not_flat()) { + // Erase not flat property for alias analysis. + tj = ta = ta->cast_to_not_flat(false); + } + if (ta && ta->is_not_null_free()) { + // Erase not null free property for alias analysis. + tj = ta = ta->cast_to_not_null_free(false); + } + if( ta && is_known_inst ) { if ( offset != Type::OffsetBot && offset > arrayOopDesc::length_offset_in_bytes() ) { offset = Type::OffsetBot; // Flatten constant access into array body only tj = ta = TypeAryPtr::make(ptr, ta->ary(), ta->klass(), true, Type::Offset(offset), ta->field_offset(), ta->instance_id());
*** 3417,3440 **** // Check to see if address types have grounded out somehow. const TypeInstPtr *tp = mem->in(MemNode::Address)->bottom_type()->isa_instptr(); assert( !tp || oop_offset_is_sane(tp), "" ); } #endif ! if (nop == Op_LoadKlass || nop == Op_LoadNKlass) { const TypeKlassPtr* tk = n->bottom_type()->make_ptr()->is_klassptr(); assert(!tk->klass_is_exact(), "should have been folded"); ! if (tk->klass()->is_obj_array_klass() || tk->klass()->is_java_lang_Object()) { ! bool maybe_value_array = tk->klass()->is_java_lang_Object(); ! if (!maybe_value_array) { ! ciArrayKlass* ak = tk->klass()->as_array_klass(); ! ciKlass* elem = ak->element_klass(); ! maybe_value_array = elem->is_java_lang_Object() || elem->is_interface() || elem->is_valuetype(); } if (maybe_value_array) { // Array load klass needs to filter out property bits (but not ! // GetNullFreePropertyNode which needs to extract the null free ! // bits) uint last = unique(); Node* pointer = NULL; if (nop == Op_LoadKlass) { Node* cast = new CastP2XNode(NULL, n); Node* masked = new LShiftXNode(cast, new ConINode(TypeInt::make(oopDesc::storage_props_nof_bits))); --- 3425,3446 ---- // Check to see if address types have grounded out somehow. const TypeInstPtr *tp = mem->in(MemNode::Address)->bottom_type()->isa_instptr(); assert( !tp || oop_offset_is_sane(tp), "" ); } #endif ! if (EnableValhalla && (nop == Op_LoadKlass || nop == Op_LoadNKlass)) { const TypeKlassPtr* tk = n->bottom_type()->make_ptr()->is_klassptr(); assert(!tk->klass_is_exact(), "should have been folded"); ! ciKlass* klass = tk->klass(); ! bool maybe_value_array = klass->is_java_lang_Object(); ! if (!maybe_value_array && klass->is_obj_array_klass()) { ! klass = klass->as_array_klass()->element_klass(); ! maybe_value_array = klass->is_java_lang_Object() || klass->is_interface() || klass->is_valuetype(); } if (maybe_value_array) { // Array load klass needs to filter out property bits (but not ! // GetNullFreePropertyNode which needs to extract the null free bits) uint last = unique(); Node* pointer = NULL; if (nop == Op_LoadKlass) { Node* cast = new CastP2XNode(NULL, n); Node* masked = new LShiftXNode(cast, new ConINode(TypeInt::make(oopDesc::storage_props_nof_bits)));
*** 3453,3463 **** --i, imax -= nb; } } } } - } break; } case Op_AddP: { // Assert sane base pointers Node *addp = n->in(AddPNode::Address); --- 3459,3468 ----
< prev index next >